"Zugriff verweigert für Benutzer 'test'@'ip' (mit Passwort:YES)" ist ein MySQL-Fehler.
Das bedeutet, dass auf Netzwerkebene alles funktioniert , da der Zugriff als bestimmter Benutzer verweigert werden soll , muss der Server verstanden haben, als welcher Benutzer Sie sich verbinden wollten . Netzwerk, Firewall, Routing usw. müssen alle funktionieren; der Server muss lauschen usw..
Das Problem liegt "einfach" in der Authentifizierung .
Versuchen Sie, sich lokal mit der Datenbank zu verbinden (um die Authentifizierung außer Kraft zu setzen) und prüfen Sie die Berechtigungstabelle:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
und denken Sie daran, dass die Zeile, die Sie interessiert, diejenige ist, die die IP erwähnt (da die Fehlermeldung die IP angibt , und nicht der Hostname – in diesem Fall könnte es ein DNS-Problem gewesen sein; der Hostname ist der Hostname, von dem der Server glaubt, dass Sie von ihm kommen , nicht der Hostname, von dem Sie wirklich kommen).
Der User/Host-Matching geht ab spezifischer zu weniger spezifisch . Wenn Sie also bereits Folgendes hatten:
user host password
test 1.2.3.4 foo
und rannte,
GRANT... TO [email protected]'%' ... PASSWORD bar
...dieses Stipendium würde überall funktionieren außer 1.2.3.4, wo das Passwort „foo“ bleiben würde.
Aus dem Handbuch (Link oben):
Möglicherweise werden Sie dazu gezwungen
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
um sicherzustellen, dass es keine falschen Zeilen in der Berechtigungstabelle gibt, die sich auf den Benutzer „test“ beziehen.
(Außerdem sollte der GRANT, denke ich,
seinGRANT ALL PRIVILEGES ON databasename.*
)
Sicherheitszweifel (unabhängig von der Antwort)
Im obigen Handbuch heißt es:Die Spezifität einer wörtlichen IP-Adresse wird nicht davon beeinflusst, ob sie eine Netzmaske hat, daher werden 192.168.1.13 und 192.168.1.0/255.255.255.0 als gleich spezifisch angesehen .
Jetzt auf den ersten Blick 127.0.0.1/0.0.0.0
scheint sehr spezifisch (und harmlos) für localhost zu sein . Die Netzmaske stellt, wenn ich mich nicht irre, sicher, dass sie %
entspricht , außer dass es unglaublich spezifisch ist und zuerst ausgeführt wird . Deshalb
test bar %
test localfoo 127.0.0.1/0.0.0.0
bedeutet, dass das Passwort für test
von überall ist es überhaupt nicht "bar", sondern "localfoo".
Niemand würde einen solchen Zuschuss versehentlich einfügen, aber es gibt Fehler und Fehler .