できない.dev

MySQL で「Access denied for user」でログインできない

Access denied はユーザー・ホスト・パスワードの組み合わせが権限テーブルの定義と一致しないと出る。
localhost と 127.0.0.1 が別扱いになる点やソケット接続の落とし穴を確認して合わせる。

公開:

要約

「ERROR 1045 (28000): Access denied for user」は、指定したユーザー・ホスト・パスワードの組み合わせが権限テーブルの定義と一致しないと出る。

パスワード誤りだけが原因ではない。'app'@'localhost''app'@'%' は別アカウント扱いになる点、localhost 指定時はソケット接続になる点が大きな落とし穴。

よくある原因

  1. パスワード誤り、または期待と違うアカウントに接続している。
  2. ホスト部の不一致: 'user'@'localhost''user'@'127.0.0.1' / 'user'@'%' は別物。
  3. ソケット経由の接続で、想定と違うアカウント(匿名ユーザー等)に当たっている。

解決策

1. 定義済みアカウントを確認する

root で入り、実際のアカウント一覧を見る。

SELECT user, host, plugin FROM mysql.user;

接続したいホスト表現(localhost / 127.0.0.1 / %)に一致する行があるか確認する。

2. 権限を付与し直す

不足していれば作成して権限を与える。

CREATE USER 'app'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON mydb.* TO 'app'@'%';
FLUSH PRIVILEGES;

3. 接続経路を明示する

localhost はソケット、127.0.0.1 は TCP になる。
意図した経路を指定して切り分ける。

mysql -u app -p -h 127.0.0.1 -P 3306 mydb

切り分けの手順は MySQL 公式の接続トラブルシュート(新しいタブで開く) が詳しい。

この記事は役立ちましたか?