web-dev-qa-db-fra.com

Accès root MySQL depuis tous les hôtes

J'ai installé le serveur MySQL sur une machine Ubuntu distante. L'utilisateur root est défini dans la table mysql.user de la manière suivante:

mysql> SELECT Host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| Host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Je peux accéder à l'utilisateur root à partir de la même interface de ligne de commande de la machine distante à l'aide du client mysql standard. Maintenant, je veux autoriser l'accès root à chaque hôte sur Internet , alors j'ai essayé d'ajouter la ligne suivante (c'est la copie exacte de la première ligne du dump précédent, à l'exception de la colonne Host):

mysql> SELECT Host, user, password FROM user WHERE Host = '%';
+------------------+------+-------------------------------------------+
| Host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Mais mon client sur mon PC persiste à me dire (j'ai masqué l'adresse IP du serveur):

Erreur SQL (2003): Impossible de se connecter au serveur MySQL sur '46 .x.x.x '(10061)

Je ne peux pas dire s'il s'agit d'une erreur d'authentification ou d'une erreur de réseau. Sur le pare-feu du serveur, j'ai activé le port 3306/TCP pour 0.0.0.0/0, et ce n'est pas grave pour moi ...

124
lorenzo-s

Ce processus comporte deux étapes:

a) Accorder des privilèges. En tant qu'utilisateur root, exécutez:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

b) se lier à toutes les adresses:

Le moyen le plus simple est de mettre en commentaire la ligne dans votre fichier my.cnf:

#bind-address = 127.0.0.1 

et redémarrez mysql

service mysql restart

Par défaut, il se lie uniquement à localhost, mais si vous commentez la ligne, il se lie à toutes les interfaces trouvées. La mise en commentaire de la ligne équivaut à bind-address=*.

Pour vérifier où le service mysql a été lié, exécutez-le en tant que root:

netstat -tupan | grep mysql

Mise à jour pour Ubuntu 16:

Le fichier de configuration est (maintenant) 

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

(au moins sur Ubuntu 16 standard)

296
hovanessyan

Exécutez la requête suivante:

use mysql;

update user set Host='%' where Host='localhost'

REMARQUE: Non recommandé pour une utilisation en production.

27
Babu James

Parfois

bind-address = 127.0.0.1 

devrait être 

bind-address = *

7
user2839051

MariaDB s'exécutant sur Raspbian - le fichier contenant l'adresse de rattachement est difficile à localiser. MariaDB a quelques pas-très-utiles-info sur le sujet.

J'ai utilisé 

# Sudo grep -R bind-address /etc 

pour localiser où est la fichue chose.

Je devais également définir les privilèges et les hôtes dans le mysql, comme le soulignaient tout le monde. 

J'ai également eu du plaisir à ouvrir le port 3306 pour les connexions distantes à mon Raspberry Pi - utilisé finalement iptables-persistent .

Tout fonctionne bien maintenant.

4
The Big Zank

si de nombreux réseaux sont connectés à votre système d'exploitation, vous devez spécifier l'un de ces réseaux dans le fichier bind-addres du fichier my.conf. un exemple:

[mysqld]
bind-address = 127.100.10.234

cette adresse IP provient d'une configuration ethX.

1
felipe cardenas

MYSQL 8.0 - Ouvrez le client en ligne de commande mysql
DONNEZ TOUS LES PRIVILÈGES SUR *. * À 'root' @ 'localhost';
utilise mysql
UPDATE mysql.user SET Hôte = '%' WHERE utilisateur = 'root';
Redémarrez le service mysql

1
user10580057

mysql_update est ce dont vous avez besoin.

Je ne sais pas pourquoi quelqu'un suivrait les moyens les plus complexes de corriger ce problème, lorsque MySql a gracieusement mis au point un outil qui le fait déjà ...

0
Kieran Foot

Dans mon cas, le paramètre "bind-address" était le problème. Commenter ce paramètre dans my.cnf fait pas help, car dans mon cas, mysql a défini la valeur par défaut sur 127.0.0.1 pour une raison quelconque.

Pour vérifier quel paramètre MySql utilise actuellement, ouvrez la ligne de commande sur votre boîte locale:

mysql -h localhost -u myname -pmypass mydb

Lire le réglage actuel:

Show variables where variable_name like "bind%"

Vous devriez voir 0.0.0.0 ici si vous voulez autoriser l'accès de tous les hôtes. Si ce n'est pas le cas, éditez votre /etc/mysql/my.cnf et définissez bind-address dans la section [mysqld]:

bind-address=0.0.0.0

Enfin, redémarrez votre serveur MySql pour prendre le nouveau paramètre:

Sudo service mysql restart

Réessayez et vérifiez si le nouveau paramètre a été enregistré.

0
iHaveacomputer