Ich habe eine Datenbank und einen Benutzer erstellt und folgenden Zugriff gewährt:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
Wenn ich jedoch versuche, eine Verbindung zu MySQL herzustellen, wird der folgende Fehler angezeigt:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Wenn "%" der Platzhalter ist, wird dann nicht auch localhost aktiviert? Wenn ich jedoch nicht spezifiziere, dass ich ein Passwort verwenden möchte, kann ich eine gute Verbindung zur Datenbank herstellen, was keinen Sinn ergibt, da ich bei der Erstellung des Benutzers ein Passwort spezifiziere.
Ich bin mir ziemlich sicher, dass Sie Folgendes brauchen:
Gewähren Sie 'someuser' @ '%' mit der Option grant alle Berechtigungen für somedb. *.
Ihrer GRANT-Anweisung fehlt eine Deklaration für den Hostnamen.
quelle
GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
Wenn Sie mit someuser @ '%' keine Verbindung zu mysql herstellen können, wobei '%' der Platzhalter für den Hostnamen ist, stellen Sie sicher, dass in Ihrer Benutzertabelle kein '' @localhost-Eintrag vorhanden ist. Bestätigen Sie mit der folgenden SQL-Anweisung:
Wenn '' @localhost vorhanden ist, entfernen Sie es, indem Sie die folgende SQL-Anweisung absetzen:
dann endlich
Jetzt stellt someuser @ '%' eine Verbindung zur Datenbank her.
quelle
Mein Verständnis, und ich bin bereit, dies zu korrigieren, ist, dass MySQL localhost getrennt von% behandelt. Das heißt, localhost ist nicht im Platzhalter enthalten.
quelle
user@%
und es hat nicht funktioniert, bis ich aufgenommen habeuser@localhost
. Dann sah ich die Antwort stackoverflow.com/a/29421084/4850646 und stellte fest, dass ich einen anonymen Benutzer mit Host hattelocalhost
. Ich habe alle anonymen Benutzer entfernt und konnte vonlocalhost
diesem Benutzer aus auch nach dem Entfernenuser@localhost
(und nur nach dem Vermietenuser@%
) darauf zugreifen . Es scheint, dass, weillocalhost
es spezifischer als ist%
, es zuerst denlocalhost
Benutzer versucht , auch wenn es ein anonymer Benutzer ist!Haben Sie
flush privileges;
nach dem Erstellen des Benutzers ausgeführt? Andernfalls werden Änderungen an Benutzern / Berechtigungen erst nach einem Neustart des Servers wirksam.Überprüfen Sie dann, ob Sie keinen '%' @ 'localhost'-Eintrag haben.
quelle