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

目次

原因

ユーザ、ホスト、パスワードのいずれかが正しくないと考えられる。

MySQLのユーザアカウント

対処法

まずは何はともあれ適切にユーザアカウントを設定することである。特にホスト名には注意したい。

MySQLにおけるDNSの利用

このエラーはパスワードが違う場合にも出力される。万が一ユーザのパスワードを忘れてしまった場合には、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

是非試して見よう。

個人用ツール