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?

Haben Sie laufen 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

Schreibe einen Kommentar