conocode
このコード
トラブルシューティング

RDS に接続しようとして ERROR 1045 (28000): Access denied for user

RDSにDBとユーザを作ってEC2からログインしようとしたらエラーになるんですけど
ユーザを作成するときの設定を間違えた可能性があるね。localhost にDBを置く場合とRDSに置く場合は違うから注意が必要だよ

ごく小規模なシステムの場合は、WEBサーバと同じマシンの中にDBサーバも起動して運用することが良くあるけど、少し規模の大きなシステムやアクセスの多いサイトなどはWEBサーバとDBサーバを分けて負荷分散します。

一つのマシンにWEBサーバもDBサーバも起動する構成と同じような設定で、EC2にWEBサーバ、RDSにDBを起動して接続しようとしたら

ERROR 1045 (28000): Access denied for user

というエラーになってしまいました。

接続できない原因は?

一台構成では問題なく接続できているのに、EC2&RDSの二台構成にすると接続できないということは通信がらみの問題が原因の可能性が高いです。

今回は、EC2からRDSに username@xxx.xxx.xxx.xxx で接続しようとしてエラーになっていました。

データベースのユーザを作成する際のホスト指定で localhost を指定したため、このユーザは localhost での接続しか受け付けられなかったようです。

EC2とRDS間の接続は localhost 接続ではありませんのでNGです。

エラーへの対処

EC2とRDSは localhost 接続ではありませんので、ユーザの host 設定を % やその他適切な値に変更してあげると接続することができました。

私はDBの管理にphpMyAdminを使うことが多いですが、phpMyAdmin の設定は以下の画像のように、ユーザを作成する際、もしくは、ユーザ情報の変更画面で「ホスト」のところに「すべてのホスト」を指定して作成(もしくは変更)を行なっています。

「すべてのホスト」に設定するのが嫌な人は、接続するホストを手動で入力するなどすれば接続ができるようになると思います。