MySQL8.4での mysql_native_password 認証プラグインの扱い

目次

はじめに

先月(2024年4月30日)、MySQL8.4 LTS (Long-Term Support)がリリースされました。
その中で、リリースノートの Deprecation and Removal Notes に記載されている mysql_native_password 認証プラグインがデフォルトで無効になったという内容について、記載したいと思います。

Important Change: The deprecated mysql_native_password authentication plugin is now disabled by default. It can be enabled by starting MySQL with the new –mysql-native-password=ON server option, or by adding mysql_native_password=ON to the [mysqld] section of your MySQL configuration file.

これまでの mysql_native_password 認証プラグイン

mysql_native_password は、ユーザパスワードのハッシュ化に SHA-1 を用いており、MySQL5.7まではデフォルトの認証プラグインでした。

MySQL8.0からは、ハッシュ化により安全な SHA-256 を用いた caching_sha2_password 認証プラグイン が追加され、デフォルトは caching_sha2_password が採用されるようになっています。
これについては、弊社ブログの MySQL8.0新機能 (caching_sha2_password 認証プラグイン) でもご紹介しております。

また、Innovation Release となるMySQL8.1で mysql_native_password は非推奨となりました。(非推奨となることは、MySQL8.0.34以降にも適用されています。)

The mysql_native_password authentication plugin now is deprecated and subject to removal in a future version of MySQL. CREATE USER, ALTER USER, and SET PASSWORD operations now insert a deprecation warning into the server error log if an account attempts to authenticate using mysql_native_password as an authentication method. (Bug #35336317)

その後、Innovation Release のMySQL8.2では、mysql_native_password を無効化することが可能となりました。

The mysql_native_password plugin, which was deprecated previously, now is no longer mandatory and can be disabled at server startup. For information about this plugin, see Native Pluggable Authentication. For general information about pluggable authentication and other available authentication plugins, see Pluggable Authentication and Authentication Plugins.

そして、最新リリースのMySQL8.4では、デフォルトで無効になったといった流れになります。
徐々に、mysql_native_password が廃止に向かっていることが、これまでのバージョンアップ過程でも読み取れます。

MySQL8.4での確認

MySQL8.4では、デフォルトのまま、mysql_native_password を指定してユーザを作成すると、以下のようにエラーとなります。

プラグインを確認すると、StatusDISABLED になっています。

また、 MySQL8.0.27以降のバージョンでは、authentication_policy で使用する認証プラグインの選択が可能となりましたが、設定ファイルに authentication_policy で mysql_native_password を設定した場合も、

以下のようにエラーで起動することができません。

MySQL8.4で mysql_native_password を使用したい場合は、 mysql_native_password=on を設定する必要があります。
設定ファイルの [mysqld] セクションに、以下のように設定を追加します。

設定後、サービスを再起動してプラグインを確認すると、StatusACTIVE になっています。

この状態になると、mysql_native_password を使用することが可能となります。

また、mysql_native_password=on を設定することで、先程設定した authentication_policy での mysql_native_password の指定も行えるようになります。

サービス再起動後、 mysql_native_password のユーザが作成されるようになっています。

しかし、注意点としてmysql_native_password のユーザがログインする度に、以下のような警告ログが出力されます。

MySQL8.0では、default_authentication_plugin でも mysql_native_password をデフォルトとするユーザを作成することができました。
しかしながら、こちらの設定は、MySQL8.4で削除された為、 authentication_policy に変更する必要がありますので、ご注意下さい。

試しに、以下のように設定してみましたが、

パラメータが存在しない旨のエラーメッセージが出力され、サービス起動エラーとなりました。

バージョンアップ時の既存ユーザ

MySQL8.0 から MySQL8.4 にアップグレードする際に mysql_native_password を指定したユーザが存在した場合は、どのような挙動になるのでしょうか?
自動的に caching_sha2_password に更新されたり、そもそもサービス起動時にエラーになるといった事がないかを確認してみました。
まずは、手元にある MySQL8.0.37 の環境に mysql_native_password を指定したユーザを作成しました。

その後、インプレースアップグレード→サービス起動を行った後にログインしたところ、以下のようなエラーとなりました。

特に起動エラーや認証プラグインが自動で変更されるといった事はありませんでしたが、デフォルトのままだと、上記エラーで mysql_native_password を使用するユーザはログインができない状態となります。
勿論、このエラーは mysql_native_password=on を設定することで解消されます。

まとめ

MySQL8.0 リリース時点では、ドライバ側が caching_sha2_password に対応していない等の理由で、継続して mysql_native_password を使用されているケースもあるかと思います。

MySQL8.4 でも引き続き設定変更することで mysql_native_password を使用することは可能ではありますが、もはや、いつ廃止されるかも分からない状況ですので、なるべく早い段階での認証プラグインの変更を行うことを推奨します。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次