Depuis des mois, je me connecte à l'instance MySQL exécutée sur notre serveur de test local via un tunnel SSH sans aucun problème. Tout à coup, cependant, sans aucun changement auquel je peux penser, le serveur a commencé à rejeter la tentative de connexion de Sequel Pro avec l'erreur:
Impossible de se connecter à l'hôte 127.0.0.1 car l'accès a été refusé.
Vérifiez votre nom d'utilisateur et votre mot de passe et assurez-vous que l'accès à partir de votre emplacement actuel est autorisé.
MySQL a dit: Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: OUI)
Je peux me connecter depuis le terminal lorsqu'il est connecté directement au serveur via SSH, mais pas via un tunnel SSH. Le problème n'est pas spécifique à Sequel Pro ou à moi-même non plus, j'obtiens la même erreur lors de la connexion via MySQL Workbench que les autres au bureau. J'ai réinitialisé le mot de passe avec mysqladmin
juste pour la raison, ce n'est certainement pas le problème.
Quand j'ai commencé à approfondir mes recherches, j'ai remarqué que l'erreur signalait le serveur comme "localhost", au lieu de "127.0.0.1" que j'ai entré dans Sequel Pro. Un ami a suggéré que c'était probablement une mauvaise gestion des erreurs, mais cela semble étrange étant donné la différence significative entre localhost et 127.0.0.1 dans MySQL.
Pour contourner le problème de tunneling, j'ai accordé l'accès à root @%, afin de pouvoir me connecter directement. Cela fonctionne pour la plupart, je peux afficher les données de table, créer de nouvelles bases de données, etc. Le seul problème est que lorsque je viens de créer des utilisateurs, j'obtiens l'erreur:
Accès refusé pour l'utilisateur 'root' @ '%' (en utilisant le mot de passe: OUI)
Curieusement, l'utilisateur est réellement créé, je pense que c'est juste un problème de subvention. Encore une fois, depuis le terminal, je peux tout faire lorsque je suis connecté en tant que root.
Quelqu'un peut-il nous aider à comprendre pourquoi les connexions de tunnel et (probablement) les commandes d'accord reçoivent l'erreur d'accès refusé?
Pour référence, MySQ est la version 5.6.16 avec principalement les paramètres par défaut, installés via Homebrew sur une machine MAC OS X Server.
Mise à jour
Voici la liste des hôtes sur lesquels root est actuellement autorisé à accéder:
mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host | user |
+----------------+------+
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+----------------+------+
4 rows in set (0.00 sec)
Si je comprends bien, la première ligne ("%") devrait vraiment rendre les autres redondantes?
Update 2
Correction du problème de subvention; l'utilisateur root @% n'a pas reçu tous les privilèges avec le supplément with grant option
à la fin, il pourrait donc tout faire sauf accorder. J'aimerais toujours savoir pourquoi les tunnels SSH sont refusés.
la source
Réponses:
Dans MySQL, le
localhost
mot-clé est réservé pour la connexion à l'aide du socket MySQL et vous devez utiliser l'adresse IP127.0.0.1
pour les connexions TCP au port réseau MySQL sur 127.0.0.1. Cela signifie que le serveur doit accorder des privilèges aux utilisateurs de particulier127.0.0.1
, et le client doit utiliser-h 127.0.0.1
pour passer par le tunnel au lieu de se connecter à une prise locale.Pour vous permettre d'accéder en utilisant la redirection de port SSH, vous avez besoin de quelque chose comme:
puis exécutez
et peut-être
Si cela ne fonctionne toujours pas, redémarrez le processus serveur.
Dans les messages d'erreur 127.0.0.1 après une recherche DNS inversée, le
localhost
débogage est difficile.Comme le manuel le décrit:
la source
grant all on *.* to 'root'@'127.0.0.1' with grant option;
ssh -h 127.0.0.1 -u root -p
distance sur le serveur, la connexion est également rejetée.-h 127.0.0.1
connexions défaillantes sur le serveur en redémarrant mysql, mais la socket ssh ne fonctionnera toujours pasJ'ai vu dans le passé avec les tunnels ssh, qu'il y a une différence entre Grant all à "localhost" et grant all à "127.0.0.1" alors essayez d'accorder à "127.0.0.1 à la place ou en plus de votre" localhost ".
la source
grant
instructions avecidentified by ..
pour vous assurer que tous les mots de passe root sont les mêmes, mais pas de joie.Au lieu d'utiliser la suite pour créer le tunnel, qu'est-ce que vous créez vous-même?
ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ domain
Connectez-vous ensuite avec Sequel au 127.0.0.1:3306 Pouvez-vous vous connecter? Quelque chose apparaît-il sur votre terminal (ou les journaux du client ssh)?
la source