Amazon RDS for MySQL 8.4 でデフォルト認証プラグインに mysql_native_password を使うように変更する

Amazon RDS for MySQL 8.4 でデフォルト認証プラグインに mysql_native_password を使うように変更する

2025.10.19

いわさです。

MySQL にはユーザー認証プラグインの概念があり、以前はmysql_native_passwordがよく使われていました。
こちらの認証プラグインmysql_native_passwordですが、MySQL リファレンスマニュアルによると、MySQL 8.0.34 以降では非推奨となり、MySQL 8.4 ではデフォルトで無効化されており、MySQL 9.0 以降では削除されるとあります。

https://dev.mysql.com/doc/refman/8.4/en/native-pluggable-authentication.html

そんなmysql_native_passwordですが、RDS for MySQL の本日時点の最新メジャーバージョン 8.4 では少し違った扱いになっています。
現在は非推奨になっていますがmysql_native_passwordをクライアントアプリケーションの関係で使うケースも稀にあると思いますので少し検証して整理してみました。

今回は RDS for MySQL の 8.0.42 と 8.4.6 を作成し、それぞれユーザー作成や認証プラグインの確認を行いました。

1D8F6B7A-225C-480C-9D1E-F0AEC95CA885_4_5005_c.jpeg

デフォルト認証の確認

まず、特にデータベースパラメータの変更を行わない時に、どの認証プラグインが使われているのかを確認してみましょう。
MySQL 8.0.42 では次のようにmysql_native_passwordが使われています。
非推奨ではあるけど、デフォルトはmysql_native_passwordなんですね。

MySQL 8.0
			
			mysql> create user hogeuser;
Query OK, 0 rows affected (0.030 sec)

mysql> select user, plugin from mysql.user;
+--------------------+-----------------------+
| user               | plugin                |
+--------------------+-----------------------+
| admin              | mysql_native_password |
| hogeuser           | mysql_native_password |
| rds_superuser_role | mysql_native_password |
| mysql.infoschema   | caching_sha2_password |
| mysql.session      | caching_sha2_password |
| mysql.sys          | caching_sha2_password |
| rdsadmin           | auth_socket           |
+--------------------+-----------------------+
7 rows in set (0.026 sec)

		

一方で MySQL 8.4.6 だとどうでしょうか。

MySQL 8.4
			
			mysql> create user hogeuser;
Query OK, 0 rows affected (0.027 sec)

mysql> select user, plugin from mysql.user;
+--------------------+-----------------------+
| user               | plugin                |
+--------------------+-----------------------+
| admin              | caching_sha2_password |
| hogeuser           | caching_sha2_password |
| rds_superuser_role | caching_sha2_password |
| mysql.infoschema   | caching_sha2_password |
| mysql.session      | caching_sha2_password |
| mysql.sys          | caching_sha2_password |
| rdsadmin           | auth_socket           |
+--------------------+-----------------------+
7 rows in set (0.027 sec)

		

こちらはcaching_sha2_passwordが使われていますね。
「MySQL 8.4 ではデフォルトで無効化されており」とあったのでデフォルトでは使えない状態なのでしょうか。

mysql_native_passwordを明示的に指定して作成することは可能

MySQL リファレンスでは次のように記載されており、デフォルトでは有効化されていないため明示的な有効化が必要とされています。[1]

The server-side plugin is built into the server, but is disabled by default. To enable it, start the MySQL Server with --mysql-native-password=ON or by including mysql_native_password=ON in the [mysqld] section of your MySQL configuration file.

具体的にはmysql-native-passwordONにする必要があるみたいです。
しかし、RDS for MySQL 8.4.6 で試したところ、どうやらデフォルトで有効化はされているようで、使うことが出来ました。

MySQL 8.4
			
			mysql> create user hogeuser2 identified with mysql_native_password by 'password';
Query OK, 0 rows affected (0.031 sec)

mysql> select user, plugin from mysql.user;
+--------------------+-----------------------+
| user               | plugin                |
+--------------------+-----------------------+
| admin              | caching_sha2_password |
| hogeuser           | caching_sha2_password |
| hogeuser2          | mysql_native_password |
| rds_superuser_role | caching_sha2_password |
| mysql.infoschema   | caching_sha2_password |
| mysql.session      | caching_sha2_password |
| mysql.sys          | caching_sha2_password |
| rdsadmin           | auth_socket           |
+--------------------+-----------------------+
8 rows in set (0.030 sec)

		

mysql-native-password プラグインは 8.4 でも ACTIVE

ここでプラグインの設定状況を確認してみましょう。
RDS for MySQL 8.0 では次のようにmysql_native_passwordACTIVEになっています。これは想定どおりですね。

MySQL 8.0
			
			mysql> show plugins;
+----------------------------------+----------+--------------------+-----------------------------+-------------+
| Name                             | Status   | Type               | Library                     | License     |
+----------------------------------+----------+--------------------+-----------------------------+-------------+
| binlog                           | ACTIVE   | STORAGE ENGINE     | NULL                        | GPL         |
| mysql_native_password            | ACTIVE   | AUTHENTICATION     | NULL                        | GPL         |
| sha256_password                  | ACTIVE   | AUTHENTICATION     | NULL                        | GPL         |
| caching_sha2_password            | ACTIVE   | AUTHENTICATION     | NULL                        | GPL         |

:

| auth_socket                      | ACTIVE   | AUTHENTICATION     | auth_socket.so              | GPL         |
+----------------------------------+----------+--------------------+-----------------------------+-------------+
47 rows in set (0.027 sec)

		

続いて RDS for MySQL 8.4ですが、こちらもACTIVEになっています。そうなのか。

MySQL 8.4
			
			mysql> show plugins;
+----------------------------------+--------+--------------------+-----------------------------+-------------+
| Name                             | Status | Type               | Library                     | License     |
+----------------------------------+--------+--------------------+-----------------------------+-------------+
| binlog                           | ACTIVE | STORAGE ENGINE     | NULL                        | GPL         |
| sha256_password                  | ACTIVE | AUTHENTICATION     | NULL                        | GPL         |
| caching_sha2_password            | ACTIVE | AUTHENTICATION     | NULL                        | GPL         |

:

| mysql_native_password            | ACTIVE | AUTHENTICATION     | NULL                        | GPL         |

:

| RDS_SECURITY_AUDIT               | ACTIVE | AUDIT              | rds_security_audit.so       | PROPRIETARY |
+----------------------------------+--------+--------------------+-----------------------------+-------------+
48 rows in set (0.026 sec)

		

てっきり RDS の DB パラメータで明示的な有効化が必要なのかと思ったのですが、デフォルトで有効になっているみたいです。

default_authentication_plugin を確認する

明示的に指定すれば使えることはわかりました。
続いてデフォルト認証プラグインとして使えるかも考えてみましょう。

結論からいうと RDS for MySQL 8.0 ではmysql_native_passwordがデフォルトとして指定されていますが、RDS for MySQL 8.4 でも設定変更が可能です。

まず、RDS for MySQL 8.0 については以下のブログで以前紹介されているのですが、mysql_native_passwordがデフォルトでdefault_authentication_pluginに指定されています。そしてこのパラメータは設定変更が出来ません。

https://dev.classmethod.jp/articles/rds-mysql-8-default-auth-plugin-is-mysql_native_password/

MySQL 8.0
			
			mysql> show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.032 sec)

		

一方で、Mysql 8.4 のタイミングでdefault_authentication_pluginパラメータは削除されていまして次のように確認が出来ませんでした。

MySQL 8.4
			
			mysql> show variables like 'default_authentication_plugin';
Empty set (0.028 sec)

		

MySQL 8.4 でデフォルト認証プラグインを変更するには authentication_policy を指定する

AWS 公式ドキュメントにも記載があるのですが、authentication_policyパラメータを指定することでデフォルト認証プラグインを変更することが出来ます。[2]

RDS for MySQL バージョン 8.4 以降のバージョンでは、caching_sha2_password プラグインをデフォルトの認証プラグインとして使用します。MySQL 8.4 のデフォルトの認証プラグインを変更できます。mysql_native_password プラグインは MySQL 8.4 でも動作しますが、このプラグインのサポートは MySQL 8.4 で終了します。デフォルトの認証プラグインを変更するには、カスタムパラメータグループを作成し、authentication_policy パラメータの値を変更します。

DB パラメータを確認してみると、デフォルトでは*:caching_sha2_passwordが設定されていました。

image.png

こちらを*:mysql_native_passwordに変更してみます。
このパラメータは Dynamic タイプなのでデータベースの再起動は不要ですね。

image.png

設定変更後にもう一度認証プラグインを指定せずにユーザーを作成してみます。

			
			mysql> create user hogeuser3;
Query OK, 0 rows affected (0.029 sec)

mysql> select user, plugin from mysql.user;
+--------------------+-----------------------+
| user               | plugin                |
+--------------------+-----------------------+
| admin              | caching_sha2_password |
| hogeuser           | caching_sha2_password |
| hogeuser2          | mysql_native_password |
| hogeuser3          | mysql_native_password |
| rds_superuser_role | caching_sha2_password |
| mysql.infoschema   | caching_sha2_password |
| mysql.session      | caching_sha2_password |
| mysql.sys          | caching_sha2_password |
| rdsadmin           | auth_socket           |
+--------------------+-----------------------+
9 rows in set (0.027 sec)

		

新しく作成されたユーザーのプラグインがmysql_native_passwordになりましたね。なるほど...!

さいごに

本日は Amaozn RDS for MySQL 8.4 でデフォルト認証プラグインに mysql_native_password を使うように変更してみました。

簡単にまとめると RDS for MySQL 8.4 では、mysql_native_passwordプラグイン自体はデフォルトで有効化されていたので明示的に指定して使いたい場合であれば特に追加の設定変更不要で使えそうです。
デフォルト認証プラグインは RDS for MySQL 8.0 と異なっており、caching_sha2_passwordが使われていますが、authentication_policyから変更できることも確認できました。

ただし、mysql_native_passwordプラグイン自体のサポートは MySQL 8.4 で終了されるので、次回の RDS for MySQL LTS がリリースされるまでにはクライアント側の対応は必須になりそうですね。

脚注
  1. MySQL :: MySQL 8.4 Reference Manual :: 8.4.1.1 Native Pluggable Authentication ↩︎

  2. Amazon RDS for MySQL の既知の問題と制限 - Amazon Relational Database Service ↩︎

この記事をシェアする

FacebookHatena blogX

関連記事