Seit Monaten verbinde ich mich ohne Probleme über einen SSH-Tunnel mit der MySQL-Instanz, die auf unserem lokalen Testserver ausgeführt wird. Auf einmal hat der Server den Anmeldeversuch von Sequel Pro mit dem folgenden Fehler abgelehnt:
Verbindung zum Host 127.0.0.1 konnte nicht hergestellt werden, da der Zugriff verweigert wurde.
Überprüfen Sie Ihren Benutzernamen und Ihr Passwort und stellen Sie sicher, dass der Zugriff von Ihrem aktuellen Standort aus gestattet ist.
MySQL sagte: Zugriff verweigert für Benutzer 'root' @ 'localhost' (mit Passwort: JA)
Ich kann mich vom Terminal aus anmelden, wenn ich über SSH direkt mit dem Server verbunden bin, nur nicht über einen SSH-Tunnel. Das Problem ist nicht spezifisch für Sequel Pro oder nur für mich selbst. Beim Herstellen einer Verbindung über MySQL Workbench tritt derselbe Fehler auf wie bei anderen Benutzern im Büro. Ich habe das Passwort mysqladmin
nur aus Gründen der Vernunft zurückgesetzt, das ist definitiv nicht das Problem.
Als ich mich genauer damit beschäftigte, bemerkte ich, dass der Fehler den Server als "localhost" statt als "127.0.0.1" meldete, den ich in Sequel Pro eingegeben hatte. Ein Freund schlug vor, dass dies wahrscheinlich nur eine schlechte Fehlerbehandlung ist, aber es erscheint seltsam angesichts des signifikanten Unterschieds zwischen localhost und 127.0.0.1 in MySQL.
In einem Versuch, das Tunneling-Problem zu umgehen, habe ich den Zugriff auf root @% gewährt, damit ich eine direkte Verbindung herstellen kann. Dies funktioniert größtenteils, ich kann Tabellendaten anzeigen, neue Datenbanken erstellen usw. Das einzige Problem ist, wenn ich Benutzer erstelle, bekomme ich den Fehler:
Zugriff für Benutzer 'root' @ '%' verweigert (mit Passwort: JA)
Seltsamerweise wird der Benutzer tatsächlich erstellt, ich denke, es ist nur ein Problem mit der Gewährung. Auch hier kann ich vom Terminal aus alles tun, wenn ich als root angemeldet bin.
Kann jemand Aufschluss darüber geben, warum Tunnelverbindungen und (wahrscheinlich) Gewährungsbefehle den Fehler "Zugriff verweigert" erhalten?
Als Referenz dient MySQ Version 5.6.16 mit den meisten Standardeinstellungen, die über Homebrew auf einem MAC OS X Server-Computer installiert werden.
Aktualisieren
Hier ist die Liste der Hosts, auf die root derzeit Zugriff hat:
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)
Wie ich es verstehe, sollte die erste Zeile ("%") die anderen wirklich überflüssig machen?
Update 2
Das Grant-Problem wurde behoben. Dem Benutzer "root @%" wurden with grant option
am Ende nicht alle Berechtigungen mit dem Zusatz "extra" erteilt . Würde trotzdem gerne wissen, warum SSH-Tunnel verweigert werden.