Warum macht PHP PDO bekommen "SQLSTATE[42000] [1044] Access denied for user", wenn die mysql-Kommandozeile funktioniert?
Mein Kopf ist blutig aus, wie hart ich habe schon schlug es gegen diese Wand für die letzten Stunden. 🙁
Wie der Titel schon sagt, habe ich einen MySQL-Benutzer mit Zugriff auf die Datenbank feine aus der mysql-Eingabeaufforderung auf dem Datenbank-server. Jedoch, wenn ich versuche zu instanziieren Sie ein neues PDO-Objekt zum Zugriff auf die Datenbank mit dem gleichen Benutzer, den ich bekommen:
SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database'
Hier, wie ich den Benutzer erstellt:
GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password';
Was könnte hier das problem?! Bitte jemanden werfen mir einen Knochen! (FYI, das problem passiert, wenn ich versuche, erstellen Sie ein neues PDO-Objekt...ich Fang eine PDOException und das ist die Botschaft).
Habe ich FLUSH PRIVILEGES nach dem zu gewähren, und hier ist die Ausgabe von SHOW GRANTS:
mysql> SHOW GRANTS FOR 'bob'@'localhost';
+------------------------------------------------------------------------------------------------------------+
| Grants for bob@localhost |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost' |
+------------------------------------------------------------------------------------------------------------+
Und hier ist, was mysql.db sieht aus wie für diesen user:
mysql> SELECT * FROM db WHERE User = 'bob'\G;
*************************** 1. row ***************************
Host: localhost
Db: my_database
User: bob
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: Y
Event_priv: N
Trigger_priv: N
Falls es eine Rolle spielt, dies ist ein vier-node MySQL cluster läuft auf Ubuntu 12.04 LTS.
EDIT: ich habe entdeckt, dass das problem nur Auftritt, wenn ich versuche, Zugriff auf den server mit Zend AMF. Irgendwelche Ideen, warum PDO nicht funktionieren würde mit dem Zend AMF? Habe ich vielleicht etwas verpasst in meinem Zend AMF-setup?
FLUSH PRIVILEGES
nach dem ausführen, dass GRANT
?Bitte Bearbeiten Sie die Frage hinzufügen, um weitere info. Code in Kommentaren ist nicht lesbar.
Vermutlich
GRANT
direkt updates die Berechtigung cache-server, so FLUSH PRIVILEGES
sollte nicht erforderlich sein. Sie brauchen nur es, wenn Sie ändern die mysql.*
Tabellen direkt.Gut, da läufst du cluster, die Sie brauchen, um zu erstellen, dass Nutzer auf jedem sql-Knoten und gebe ihm die Rechte auf jedem Knoten... haben Sie das getan? "Es ist wichtig, im Auge zu behalten, dass die MySQL-grant-Tabellen verwenden Sie die MyISAM-Speicher-engine. Weil dieses, diese Tabellen werden nicht dupliziert, oder die gemeinsam von MySQL-Server fungiert als SQL-nodes in einem MySQL Cluster." dev.mysql.com/doc/refman/5.0/en/...
InformationsquelleAutor Rob Johansen | 2012-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen 'bob'@'127.0.0.1' statt. Bei php ist der Zugriff über 127.0.0.1, werden nie bezeichnet werden als 'localhost', da der lokale DNS-Auflösung ist nicht geschehen, und MySQL wird den Zugriff verweigern.
InformationsquelleAutor Synthead
Für zukünftige Googler, ich hatte das gleiche problem, nur jetzt, und ich war ziemlich sicher, dass das Passwort korrekt war. Ja, das Passwort war korrekt, ja, aber das problem ist, wie ich das Passwort generieren und wie halte ich das Passwort in der config-Datei.
Wenn Sie ein zufälliges Passwort-generator wie mich stellen Sie sicher, dass Sie nicht
$
dollar-Zeichen in Ihrem Kennwort.Wenn Sie
$
in der Sie das Passwort dann stellen Sie sicher, halten Sie das Passwort in der config-Datei mit single-quotes wie dieseaber nicht mit doppelten Anführungszeichen, wie dies
InformationsquelleAutor Ergec