「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ユーザーを作っていませんでしたはい。(というかMAMPのMySQL使ってるのつい忘れてユーザー作ったのにエラー解消されないな??みたいな同じこと前にもあった)
のでまずはユーザーを作る。
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 ユーザーアカウントの追加