Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zugriff für Benutzer 'test'@'ip' verweigert (mit Passwort:YES)

"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,

sein
GRANT 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 .