web-dev-qa-db-fra.com

accorder un accès distant à la base de données MySQL à partir de n'importe quelle adresse IP

Je suis conscient de cette commande:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Mais cela ne me permet que d'accorder une adresse IP particulière pour accéder à cette base de données MySQL distante. Que faire si je le souhaite afin que tout hôte distant puisse accéder à cette base de données MySQL? Comment je fais ça? En gros, je rends cette base de données publique afin que tout le monde puisse y accéder.

238
adit
TO 'user'@'%'

% est un caractère générique - vous pouvez aussi faire '%.domain.com' ou '%.123.123.123' et des choses comme ça si vous en avez besoin.

234
Ariel

Activer l'accès à distance (Grant) Accueil/Tutoriels/Mysql/Activer l'accès à distance (Grant) Si vous essayez de vous connecter à votre serveur mysql depuis une machine distante et que vous rencontrez une erreur comme ci-dessous, cet article est pour vous.

ERREUR 1130 (HY000): L’hôte ‘1.2.3.4’ n’est pas autorisé à se connecter à cette Serveur MySQL

Changer la configuration de mysql

Commencez par éditer le fichier de configuration mysql

vim /etc/mysql/my.cnf

Commentez les lignes suivantes.

#bind-address           = 127.0.0.1
#skip-networking

Si vous ne trouvez pas de ligne de saut de réseau, ajoutez-la et commentez-la.

Redémarrez le serveur mysql.

~ /etc/init.d/mysql restart

Changer le privilège GRANT

Vous serez peut-être surpris de voir que même après la modification ci-dessus, vous n'obtenez pas d'accès à distance ni d'accès mais ne pouvez pas accéder à toutes les bases de données.

Par défaut, le nom d'utilisateur et le mot de passe mysql que vous utilisez sont autorisés à accéder à mysql-server localement. Donc besoin de mettre à jour le privilège.

Exécutez une commande comme ci-dessous pour accéder à partir de toutes les machines. (Remplacez USERNAME et PASSWORD par vos informations d'identification.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Exécutez une commande comme ci-dessous pour donner accès à une adresse IP spécifique. (Remplacez USERNAME et PASSWORD par vos informations d'identification.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Vous pouvez remplacer 1.2.3.4 par votre IP. Vous pouvez exécuter plusieurs fois la commande ci-dessus pour DONNER un accès à partir de plusieurs adresses IP.

Vous pouvez également spécifier une variable USERNAME & PASSWORD pour l’accès distant.

Vous pouvez vérifier le résultat final en:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Enfin, vous devrez peut-être aussi exécuter:

mysql> FLUSH PRIVILEGES;

Test de connexion

Depuis le terminal/ligne de commande:

mysql -h Host -u USERNAME -pPASSWORD

Si vous avez un shell mysql, n’oubliez pas d’exécuter des bases de données show; pour vérifier si vous avez les droits appropriés des machines distantes.

Bonus-Astuce: Révoquer l'accès

Si vous accordez accidentellement l'accès à un utilisateur, il vaut mieux avoir l'option de révocation à portée de main.

Ce qui suit annulera toutes les options pour USERNAME de toutes les machines:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Si vous voyez le privilège USAGE après avoir exécuté la commande REVOKE, tout va bien. C'est presque comme pas de privilège du tout. Je ne sais pas si cela peut être révoqué.

140
Sandhyalal Kumar

En supposant que l'étape ci-dessus soit terminée et que le port MySql 3306 soit libre d'accès à distance; N'oubliez pas de lier l'adresse IP publique dans le fichier de configuration mysql.

Par exemple sur mon serveur Ubuntu:

#nano /etc/mysql/my.cnf

Dans le fichier, recherchez le bloc [mysqld] section et ajoutez la nouvelle adresse de liaison. Dans cet exemple, il s'agit de 192.168.0.116. Ça ressemblerait à quelque chose comme ça

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

vous pouvez supprimer la liaison localhost (127.0.0.1) si vous le souhaitez, mais vous devez ensuite donner une adresse IP spécifique pour accéder au serveur sur la machine locale.

Ensuite, la dernière étape consiste à redémarrer le serveur MySql (Sous Ubuntu)

stop mysql

start mysql

ou #/etc/init.d/mysql restart pour d'autres systèmes

Maintenant, la base de données MySQL est accessible à distance par:

mysql -u username -h 192.168.0.116 -p
36
Waqas

Pour tous ceux qui ont manqué à cela, voici comment j'ai pu accorder les privilèges, espérons que cela aidera quelqu'un

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Comme indiqué, % est un caractère générique qui permet à n’importe quelle adresse IP de se connecter à votre base de données. L'hypothèse que je fais ici est que lorsque vous vous connecterez, vous aurez un utilisateur nommé root (qui est le nom par défaut cependant). Entrez le mot de passe root et vous êtes prêt à partir. Notez que je n'ai pas de guillemets simples (') autour de la racine de l'utilisateur.

24
Dev

Des modifications du fichier de configuration sont nécessaires pour activer les connexions via localhost.

Pour vous connecter via des IP distantes, connectez-vous en tant qu'utilisateur "root" et exécutez les requêtes ci-dessous dans mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Cela créera un nouvel utilisateur accessible sur localhost et à partir d'adresses IP distantes. 

Commentez également la ligne ci-dessous de votre fichier my.cnf situé dans /etc/mysql/my.cnf

bind-address = 127.0.0.1

Redémarrez votre mysql en utilisant 

Sudo service mysql restart

Vous devriez maintenant pouvoir vous connecter à distance à votre mysql.

20
harishannam

Utilisez cette commande:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Ensuite:

FLUSH PRIVILEGES; 

Puis commentez la ligne ci-dessous dans le fichier "/etc/mysql/mysql.conf.d/mysqld.cnf" (est obligatoire!):

bind-address = 127.0.0.1 

Travaille pour moi!

18
Tomasz Czechowski

Exécutez ce qui suit:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Puis essayez une connexion à partir de l'adresse IP que vous avez spécifiée:

mysql -h address-of-remove-server -u root -p   

Vous devriez pouvoir vous connecter.

16
akhil.o.v

Vous pouvez résoudre le problème de MariaDB via cette commande :

Remarque:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

% est un caractère générique. Dans ce cas, il fait référence à toutes les adresses IP.

GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
8
user3846464

Pour accéder à distance à la base de données Mysql Server 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
4
Anil Rana

Editer le fichier:

/etc/mysql/percona-server.cnf

Ajouter ci-dessous le code dans le fichier.

[mysqld] bind-address = 0.0.0.0

Créer un utilisateur pour un accès à distance.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Tout le serveur linux fonctionne,

Pour MSWin c:\Find insatallation location\chemin du fichier

4
Tejas Tank
  • LANCEZ MYSQL en utilisant l’administrateur
    • mysql -u admin-user -p (invite de saisie du mot de passe activé)
  • Créez un nouvel utilisateur:
    • CREATE USER 'newuser' @ '%' IDENTIFIED BY 'password'; (% -> anyhost)
  • Accorder des privilèges:
    • GRANT SELECT, DELETE, INSERT, UPDATE SUR Db_name. * TO 'newuser' @ '%';
    • FLUSH PRIVILEGES;

Si vous exécutez une instance EC2, n'oubliez pas d'ajouter les règles entrantes dans le groupe de sécurité avec MYSQL/Aurura.

3
Rifaideen

Pour pouvoir vous connecter à votre utilisateur à partir de n'importe quelle adresse IP, procédez comme suit:

Autoriser le serveur mysql à accepter les connexions distantes. Pour ce fichier mysqld.conf ouvert:

Sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

Recherchez la ligne commençant par "bind-address" et définissez sa valeur sur 0.0.0.0

bind-address                    = 0.0.0.0

et enfin enregistrer le fichier.

Maintenant, redémarrez le serveur mysql, soit avec systemd, soit utilisez l'ancienne commande service:

Sudo systemctl restart mysqld.service

Enfin, le serveur mysql est maintenant capable d’accepter les connexions distantes.

Nous devons maintenant créer un utilisateur et lui accorder une autorisation afin de pouvoir nous connecter à distance avec cet utilisateur.

Connectez-vous à la base de données MySQL en tant qu'utilisateur root ou à tout autre utilisateur disposant du privilège root.

mysql -u root -p

maintenant, créez l'utilisateur souhaité dans les caractères génériques localhost et '%' et accordez les autorisations sur toutes les bases de données en tant que telles.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Ensuite,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

Et enfin, n'oubliez pas de supprimer les privilèges

FLUSH PRIVILEGES;

J'espère que cela t'aides ;)

3

Ouvrez votre mysql console et exécutez la commande suivante (entrez votre nom de base de données, nom d'utilisateur et mot de passe):

GRANT ALL sur votre nom de base de données. * TO admin @ '%' IDENTIFIED BY 'yourRootPassword';

Puis exécutez:

FLUSH PRIVILEGES;

Ouvrez la ligne de commande et ouvrez le fichier /etc/mysql/mysql.conf.d/mysqld.cnf en utilisant n’importe quel éditeur avec root privileges.

Par exemple:

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Puis commentez la ligne ci-dessous:

bind-address = 127.0.0.1

Redémarrez mysql pour refléter les modifications à l'aide de la commande suivante:

Sudo service mysql restart

Prendre plaisir ;)

2
Usman Yousaf

Il suffit de créer l'utilisateur dans une base de données comme 

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>' 

Ensuite aller à 

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf et changez la ligne bind-address = 127.0.0.1 en bind-address = 0.0.0.0

Après cela, vous pouvez vous connecter à cette base de données à partir de n’importe quelle adresse IP.

2
Diogo Mendes

Vous devez changer le fichier de configuration mysql:

Commencez par éditer le fichier de configuration mysql

vim /etc/mysql/my.cnf

ajouter:

bind-address = 0.0.0.0
1
bhushan pardhi

Par exemple dans mon CentOS

Sudo gedit /etc/mysql/my.cnf

commenter les lignes suivantes

# bind-address = 127.0.0.1

puis 

Sudo service mysqld restart

0
zawhtut

ce qui a fonctionné pour Ubuntu est d’accorder tous les privilèges à l’utilisateur:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

et en définissant l'adresse de liaison dans /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

puis en redémarrant le démon mysql:

service mysql restart
0
Miguel Mota

Si vous souhaitez accorder un accès distant à votre base de données à partir de n'importe quelle adresse IP, exécutez la commande mysql, puis lancez la commande suivante.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
0
Atul6.Singh

Dans les panneaux de site Web comme cPanel, vous pouvez ajouter un seul % (signe de pourcentage) dans les noms d’hôte autorisés à accéder à votre base de données MySQL.

En ajoutant un seul %, vous pouvez accéder à votre base de données à partir de n’importe quel IP ou site web, même à partir d’applications de bureau.

0
Muhammad Saqib