目玉焼きに塩

おいしい

「SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)」のエラーが出る

現象

Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES) というエラーが発生する。


原因と対応

testユーザーを作っていませんでしたはい。(というかMAMPMySQL使ってるのつい忘れてユーザー作ったのにエラー解消されないな??みたいな同じこと前にもあった)

のでまずはユーザーを作る。

CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';
CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';

そして作ったユーザーに対して必要な権限を付与する。

GRANT 権限 ON DB名.テーブル名 TO 'ユーザー名'@'ホスト名';
GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';

ここまでの対応でエラーが解消された。


補足

  • ユーザー名やホスト、権限設定はmysql.userテーブルで確認することができる。
SELECT * FROM mysql.user WHERE user = 'test'¥G

*************************** 1. row ***************************
           Host: localhost
             Db: test
           User: test
    Select_priv: Y
    Insert_priv: Y
    Update_priv: Y
    Delete_priv: Y
    Create_priv: Y
      Drop_priv: Y
     Grant_priv: N
References_priv: Y
     Index_priv: Y
     Alter_priv: Y
                (以下略)


- 調べる中で「GRANTで権限付与したあと、FLUSH PRIVILEGES;で設定の反映が必要」的な情報も見かけたけど、これは不要な様子。

INSERT を使用してアカウントを作成する場合は、FLUSH PRIVILEGES を使用して、付与テーブルを再ロードするようにサーバーに指示する必要があります。そうしなければ、サーバーを再起動するまで変更が認識されません。CREATE USER では、FLUSH PRIVILEGES が必要ありません。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.3.2 ユーザーアカウントの追加


参考にさせていただきました

qiita.com

stackoverflow.com