MySQL の caching_sha2_password 認証に対応する

Description

従来利用してきた mysql_native_password 認証が2024/07リリースの MySQL 9.0 で削除になるとのことで、 MySQL 8 で導入された caching_sha2_password でも認証できるようにしておく必要性が高まっている(https://dev.mysql.com/doc/relnotes/mysql/8.4/en/news-8-4-0.html#mysqld-8-4-0-deprecation-removal によると MySQL 8.4 でも mysql_native_password がデフォルト無効になっている)。

To connect to the server using an account that authenticates with the caching_sha2_password plugin, you must use either a secure connection or an unencrypted connection that supports password exchange using an RSA key pair, as described later in this section. Either way, the caching_sha2_password plugin uses MySQL's encryption capabilities. See Section 8.3, “Using Encrypted Connections”.

とのことなので、MySQL と SSL 接続するためのオプションや公開鍵を渡しやすくするためのオプションなどを用意しておく必要がありそう。

cf. https://dev.mysql.com/doc/refman/9.0/en/caching-sha2-pluggable-authentication.html

https://dev.mysql.com/doc/refman/9.0/en/encrypted-connections.html

Checklists

None

Attachments

1
  • 02 Aug 2024, 03:47 PM

Activity

Show:

Kenichi IshigakiNovember 27, 2024 at 5:19 AM

ありがとうございます。マージしました。

Reiko SatoNovember 27, 2024 at 4:20 AM

NONE+上記の3つの設定で2バージョンとも起動できました。

Taku AmanoNovember 27, 2024 at 3:50 AM

うーんなんだろう、大丈夫そうですけどね。

 

mt-dev の挙動の特徴として、うっかり間違えそうなところとしては、以下のような点があります。

  • mt.cgi への接続 : mt-config.cgi を変更して反映させる場合には、再度 vagrant mt-dev ... から起動し直す必要がある

  • ダイナミックパブリッシング : mt-config.cgi を変更するとすぐに反映される

 

あと mt-config.cgi の内容としては、例えばNONEでも「DBIConnectOptions mysql_ssl_client_cert だけをコメントアウトした」状態では接続できなくなります。パターンとしては以下のようなものがあります。

  • 全く未設定 : mysql8とか、古い環境ならこれ

  • SSLだけど証明書の検証はなし: NONE か SSL 用

DBIConnectOptions mysql_ssl=1 DBIConnectOptions mysql_ssl_verify_server_cert=0
  • SSLで、証明書の検証はあり : これも NONE か SSL 用

DBIConnectOptions mysql_ssl=1 DBIConnectOptions mysql_ssl_verify_server_cert=1 DBIConnectOptions mysql_ssl_ca_file=/mt-dev/ssl/certs/ca-cert.pem
  • クライアントの証明書を使う : これは X509用。ただし、NONE や SSL でも接続は可能

DBIConnectOptions mysql_ssl=1 DBIConnectOptions mysql_ssl_verify_server_cert=1 DBIConnectOptions mysql_ssl_client_key=/mt-dev/ssl/certs/client-key.pem DBIConnectOptions mysql_ssl_client_cert=/mt-dev/ssl/certs/client-cert.pem DBIConnectOptions mysql_ssl_ca_file=/mt-dev/ssl/certs/ca-cert.pem

 

一回、以下の設定にして、MTを起動し直して、NONE のときに接続できるか試してもらってもいいでしょうか。

DBIConnectOptions mysql_ssl=1 DBIConnectOptions mysql_ssl_verify_server_cert=1 DBIConnectOptions mysql_ssl_ca_file=/mt-dev/ssl/certs/ca-cert.pem

Kenichi IshigakiNovember 27, 2024 at 2:50 AM

うーん、あとはなんだろう。 docker system prune とか、 docker image ls したあとで mysql 9.0 のイメージの ID を見て docker image rm <そのID> してからもう一度試してみるとか?

もし何かお心当たりありましたらフォローおねがいします。

Reiko SatoNovember 27, 2024 at 2:45 AM


vagrant mt-dev exec-mysql MYSQL_COMMAND_ARGS="-e \"ALTER USER 'root'@'%' REQUIRE NONE\""
をしても、configのDBIConnectOptionsがひとつでもコメントアウトされていると接続できませんになります。

NONEの状態なのに、X509に設定している時と同じになっています。

Implemented

Details

Assignee

Reporter

Fix versions

Priority

Smart Checklist

Created July 2, 2024 at 1:43 AM
Updated January 7, 2025 at 11:29 PM
Resolved November 27, 2024 at 5:19 AM