⭐️MySQL 8.0 認証エラーの理由と解決策のまとめ

ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

mysql -u test-user -h 127.0.0.1 -P 3306 -pだとエラーになるが、 mysql -u test-user -h 127.0.0.1 -P 3306 -p --ssl-mode=DISABLED --get-server-public-keyだとエラーにならない理由。

  1. エラーの原因 (ERROR 2061) MySQL 8.0 からデフォルトになった認証プラグイン caching_sha2_password は、セキュリティのためにパスワードをそのままネットワークに流すことを禁止している。そのため、以下のいずれかの方法でパスワードを保護する必要がある
  • SSL/TLS を利用した通信全体の暗号化
  • RSA 公開鍵を利用したパスワードのみの暗号化

-h 127.0.0.1 は TCP 接続となるが、SSL が有効でない環境で、かつパスワードをどう暗号化するかの指示がなかったため、サーバー側が拒否したのがエラーの真相

  1. 成功したコマンドの仕組み 2番目のコマンドが通ったのは、以下のオプションでパスワード保護の代わりの手段を確立したから。
  • –ssl-mode=DISABLED: 通信全体の SSL 暗号化は行わないと宣言。
  • –get-server-public-key: 通信全体は暗号化しない代わりに、サーバーから RSA 公開鍵をもらってパスワードだけを暗号化して送る。

この手順を踏むことで、セキュアな接続(Secure connection)という要件を最低限満たした扱いになり、ログインが可能になった。