2012-09-15 11 views
5

私の頭は、過去数時間この壁にぶつかってどれくらい苦労しているのですか? :(mysqlコマンドラインが動作しているときに、PHP PDOが「SQLSTATE [42000] [1044] Access denied for user」を取得するのはなぜですか?

タイトルが示唆しているように、データベースサーバのmysqlコマンドプロンプトからデータベースにアクセスできるMySQLユーザを作成しましたが、新しいPDOオブジェクトをインスタンス化してその同じユーザとデータベース、私が手:

SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database' 

は、ここで私は、ユーザー作成方法は次のとおりです。ここで問題になる可能性がどのような

GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password'; 

を?!誰かが私に骨を投げてください(FYI、問題を!私が作成しようとすると起こる新しいPDOオブジェクト... PDOExceptionをキャッチし、それがメッセージです)。

私は、付与後にFLUSH PRIVILEGESをした、とここでのSHOW GRANTSの出力です:

mysql> SHOW GRANTS FOR 'bob'@'localhost'; 
+------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' | 
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost'      | 
+------------------------------------------------------------------------------------------------------------+ 

そして、ここではmysql.dbこのユーザーのために次のようになります。

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 

それが重要場合これは、Ubuntu 12.04 LTS上で動作する4ノードのMySQLクラスタです。

EDIT:この問題は、Zend AMFを使用してサーバーにアクセスしようとしたときにのみ発生することがわかりました。 PDOがZend AMFで動作しない理由は何ですか? Zend AMFのセットアップで何かが忘れられましたか?

+4

のような二重引用符でこの

$pass = 'randomchars$morerandom'; 

ではなく、のように単一引用符を使用して設定ファイルにあなたのパスワードを保つことを確認してくださいあなたをDID 'GRANT'を実行した後に' FLUSH PRIVILEGES'を実行しますか? –

+0

質問を編集して詳細を追加してください。コメントのコードは読めません。 –

+0

恐らく、 'GRANT'はサーバの特権キャッシュを直接更新するので、' FLUSH PRIVILEGES'は必要ではありません。 mysql。*テーブルを直接変更する場合にのみ必要です。 – lanzz

答えて

5

代わりに 'bob'@'127.0.0.1'を試してください。 PHPが127.0.0.1経由でアクセスしている場合、ローカルDNS解決が行われなかったので、これは決して 'localhost'と呼ばれず、MySQLはアクセスを拒否します。

3

将来のGoogle社員のために、今でも同じ問題が発生していて、パスワードが正しいことが分かりました。はいパスワードは確かに正しいですが、問題はどのように私はパスワードを生成し、どのように私は設定ファイルにパスワードを保持します。

私のようなランダムなパスワードジェネレータを使用する場合は、パスワードに$ドル記号が含まれていないことを確認してください。

あなたがパスワードで$を持っているなら、あなたはこの

$pass = "randomchars$morerandom"; 
関連する問題