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だとエラーにならない理由。
- エラーの原因 (
ERROR 2061) MySQL 8.0 からデフォルトになった認証プラグインcaching_sha2_passwordは、セキュリティのためにパスワードをそのままネットワークに流すことを禁止している。そのため、以下のいずれかの方法でパスワードを保護する必要がある
- SSL/TLS を利用した通信全体の暗号化
- RSA 公開鍵を利用したパスワードのみの暗号化
-h 127.0.0.1 は TCP 接続となるが、SSL が有効でない環境で、かつパスワードをどう暗号化するかの指示がなかったため、サーバー側が拒否したのがエラーの真相
- 成功したコマンドの仕組み 2番目のコマンドが通ったのは、以下のオプションでパスワード保護の代わりの手段を確立したから。
- –ssl-mode=DISABLED: 通信全体の SSL 暗号化は行わないと宣言。
- –get-server-public-key: 通信全体は暗号化しない代わりに、サーバーから RSA 公開鍵をもらってパスワードだけを暗号化して送る。
この手順を踏むことで、セキュアな接続(Secure connection)という要件を最低限満たした扱いになり、ログインが可能になった。