Quantcast
Channel: 日々の覚書
Viewing all articles
Browse latest Browse all 581

MySQL 8.0のcaching_sha2_password + 非SSL接続が転ける

$
0
0
$ mysql80 -h 127.0.0.1 -u yoku0825 --ssl-mode=disabled -p
Enter password:
ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
このエラーになる条件。
  • caching_sha2_passwordプラグインを使っているアカウント
    かつ
  • まだサーバー側にSHA2キャッシュが作られていないアカウント
    かつ
  • サーバーの公開鍵を指定していない非SSLのTCP接続
この条件に合致しているとログインが転けて↑のエラーを食らう。

解決策1. caching_sha2_passwordプラグインをやめて mysql_native_passwordプラグインを指定する

mysql> ALTER USER yoku0825 IDENTIFIED WITH mysql_native_password BY 'new_password`;

解決策2. 一度ログインに成功すればサーバー側にSHA2キャッシュが作成されるので、一度「エラーになる条件を満たさない」接続をしてやる

$ mysql80 -h localhost -S /usr/mysql/8.0.13/data/mysql.sock -u yoku0825 -p ## ソケット接続
$ mysql80 -h 127.0.0.1 -u yoku0825 --ssl-mode=PREFERRED -p ## SSL接続
$ mysql80 -h 127.0.0.1 -u yoku0825 --ssl-mode=disabled -p --server-public-key-path=/usr/mysql/8.0.13/data/public_key.pem ## サーバー公開鍵を指定した非SSL接続

解決策3. サーバーの公開鍵を指定する

↑と一緒で、 mysqlコマンドラインクライアントだとこう。

$ mysql80 -h 127.0.0.1 -u yoku0825 --ssl-mode=disabled -p --server-public-key-path=/usr/mysql/8.0.13/data/public_key.pem ## サーバー公開鍵を指定した非SSL接続
のいずれかをやればOK。

要は、 caching_sha2_passwordだと初回の認証成功時にパスワードキャッシュをサーバーサイドに作るらしいんだけど、そこでMITM攻撃を食らうとマズいからこんな仕様になっているらしい。
その理屈(どうして1回目だけがmysql_native_passwordとかと比べてダメなのか)はよくわからないんだけど誰か読んで教えてくだしあ(ソースを読まないとこれ以上の理解は出てこないような気もする)
なお、
  • mysqldの再起動
  • FLUSH PRIVILEGES
  • キャッシュはアカウント単位なので、 CREATE USER直後
もこれ(SHA2キャッシュがない状態)にあたるので、おとなしくSSL接続使うようにした方が良いと思われるのでした。
なお、このネタはご覧のスポンサー(?)の提供でお送りしました















Viewing all articles
Browse latest Browse all 581

Trending Articles