Access denied for user '%s'@'%s' to database '%s'
提供:MySQL Practice Wiki
エラー概要
| MySQLエラー番号 | 1045 |
| SQLSTATE | 28000 |
| エラー名 | ER_ACCESS_DENIED_ERROR |
| メッセージ | Access denied for user '%s'@'%s' (using password: %s) |
| 障害部位 | mysqld |
| 該当バージョン | any |
| エラーの原因 | 以下を参照。 |
| 対策 | 以下を参照。 |
| 備考 | nada |
目次 |
原因
ユーザ、ホスト、パスワードのいずれかが正しくないと考えられる。
対処法
まずは何はともあれ適切にユーザアカウントを設定することである。特にホスト名には注意したい。
このエラーはパスワードが違う場合にも出力される。万が一ユーザのパスワードを忘れてしまった場合には、SUPER権限を持ったユーザ(通常はroot@localhost)でパスワードの再設定をするといい。パスワードの再設定にはSET PASSWORDコマンドを使う。
mysql> SET PASSWORD FOR mikiya@www.example.com = PASSWORD('新しいパスワード');
また、ホスト名とユーザ名の組み合わせによって、例えばユーザ名の指定がないアカウントやホスト名にワイルドカードを利用しているアカウントなどがある場合、ユーザーが意図しないアカウントによって認証が行われてしまう可能性がある。そのような場合は、不要なアカウントを削除したり、ユーザーを再作成することによって意図したユーザアカウントが正常に使われるよう調整しよう。
ユーザ名やホスト名を明示しないアカウント
次のように、ユーザ名やホスト名の指定がないアカウントは作らないようにしよう。セキュリティ上の懸念になるだけでなく、管理面でもややこしくなってしまうからだ。
mysql> GRANT ALL ON *.* TO sakila@`%` IDENTIFIED BY 'abc'; mysql> GRANT ALL ON *.* TO ``@localhost IDENTIFIED BY '123';
このアカウントはどちらが先にソートされるだろうか?つまり、sakila@localhostというアカウントが存在しない状態で、localhost上からユーザ名「sakila」でログインする場合、どちらのパスワードを指定すればいいだろうか。
shell> mysql -u sakila -p test
是非試して見よう。