質問: アプリケーションから、外部のMysqlサーバーへのデータの読み書きを行いたいため、 ローカルのMysqlクライアント?から、AWS上に作成したMysqlへの接続を試しています。 検索すると、関連する情報はたくさんでてくるので、試してみていますが接続できません。 (サーバー側で3306をListen状態であることも確認しましたし、アクセスができるようなユーザーも作成しました。) 1点、不思議なのが、 ``` mysql -u user -p -h hostname ``` と入力した際の挙動が、 ``` Enter password: ERROR 1045 (28000): Access denied for user 'user'@'プロバイダのサーバーと思われる名前' (using password: YES) ``` と、返ってきます。しかし、ping を同様にhostnameで実行しても、正しいグローバルIPが帰ってきます。 これは社内のネットワークで実行しているため、なにかそういった設定がなされているのかもしれません。しかし、自宅のLAN環境で実施した場合も、同様の現象が起こってしまいます。 こちらは何が原因なのでしょうか? 主にNWの問題だと思うのですが、どのように検索すればよいかわからず。。。
回答: もしかして select * from user; を行ったときに、 「Host が % もしくは空で、かつ User も空、パスワードはなし」のエントリがあったりしませんか。 MySQL での接続チェックの際、user のエントリを「Host と User でソート」して、その先頭から見るので、上の条件に合致するレコードがあると「任意のホストからの、匿名ユーザ、パスワードは指定なし」としてのログインとみなされます。 そしてパスワードが指定されていれば、「パスワード指定なし」とマッチしないので接続が拒否されます。 ※任意のパスワードを受け付ける、ではない このとき仮にホストとユーザを指定したレコードが(例えば user@localhost)あっても、それより優先して権限チェックされてしまいます。