最近のMySQLのデフォルト認証プラグインの変遷とAWS RDS/Auroraの対応状況をまとめた
TL;DR
※2024年7月28日時点の情報をもとに執筆しています。
- MySQL8.0 でデフォルトの認証プラグインが mysql_native_password から caching_sha2_password へ変更
- MySQL8.4 で mysql_native_password は非推奨となりデフォルトで無効
- AWS RDS/Aurora における現行の最新バージョン(MySQL8.0互換)ではデフォルトで mysql_native_password が使われておりパラメータの変更は不可
変更の履歴と現状
MySQL8.0 でデフォルトの認証プラグインが mysql_native_password からcaching_sha2_password へ変更された。
Important
In MySQL 8.0, caching_sha2_password is the default authentication plugin rather than mysql_native_password. For information about the implications of this change for server operation and compatibility of the server with clients and connectors, see caching_sha2_password as the Preferred Authentication Plugin.
重要
MySQL 8.0 では、mysql_native_password ではなく caching_sha2_password がデフォルトの認証プラグインです。この変更によるサーバ動作への影響、およびクライアントやコネクタとの互換性については、「優先認証プラグインとしての caching_sha2_password」 を参照してください。
現行 LTS である MySQL8.4 でデフォルトの認証プラグインが caching_sha2_password になり mysql_native_password が非推奨とされた。
8.4.1.1 Native Pluggable Authentication
Note
The mysql_native_password authentication plugin is deprecated and subject to removal in a future version of MySQL.
注意
mysql_native_password 認証プラグインは非推奨であり、MySQL の将来のバージョンで削除される可能性があります。
さらに 8.4 ではデフォルトで mysql_native_password が無効となっているため、明示的に有効化しなければ利用できない。
8.4.1.1 Native Pluggable Authentication
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 サーバを --mysql-native-password=ON で起動するか、MySQL 設定ファイルの [mysqld] セクションに mysql_native_password=ON を記述します。
有効化が未設定で CREATE USER などを行おうとすると下記のようなエラーとなる。
mysql> CREATE USER hoge@localhost IDENTIFIED WITH 'mysql_native_password';
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
my.cnf で mysqld のオプショングループに下記のような設定を追加し、サーバー側の設定を行えば良い(サーバー起動時のオプションとして、--mysql-native-password=ON
を使っても可)。
[mysqld]
mysql_native_password=ON
mysql> CREATE USER hoge@localhost IDENTIFIED WITH 'mysql_native_password';
Query OK, 0 rows affected (0.09 sec)
ちなみに有効か無効かの設定は information_schema で確認可能。
SELECT * FROM INFORMATION_SCHEMA.PLUGINS\G;
...
*************************** 48. row ***************************
PLUGIN_NAME: mysql_native_password
PLUGIN_VERSION: 1.1
PLUGIN_STATUS: ACTIVE
PLUGIN_TYPE: AUTHENTICATION
PLUGIN_TYPE_VERSION: 2.1
PLUGIN_LIBRARY: NULL
PLUGIN_LIBRARY_VERSION: NULL
PLUGIN_AUTHOR: Oracle Corporation
PLUGIN_DESCRIPTION: Native MySQL authentication
PLUGIN_LICENSE: GPL
LOAD_OPTION: ON
48 rows in set (0.01 sec)
無効の場合は下記のように PLUGIN_STATUS が DISABLED になる。
SELECT * FROM INFORMATION_SCHEMA.PLUGINS\G;
...
*************************** 48. row ***************************
PLUGIN_NAME: mysql_native_password
...
PLUGIN_STATUS: DISABLED
...
AWS の RDS/Aurora においては、現行の最新バージョン(MySQL8.0互換)で mysql_native_password がデフォルトの設定かつ変更が不可。
Amazon RDS for MySQL の既知の問題と制限
MySQL デフォルト認証プラグイン
RDS for MySQL バージョン 8.0.34 以降では、mysql_native_password プラグインを使用します。default_authentication_plugin 設定は変更できません。
Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較
コミュニティ MySQL 8.0 では、デフォルトの認証プラグインは caching_sha2_password です。Aurora MySQL バージョン3では、mysql_native_password プラグインがまだ使用されます。default_authentication_plugin 設定は変更できません。
以上の内容をまとめると下記のような感じ。
デフォルトの認証プラグイン
mysql_native_password | caching_sha2_password | |
---|---|---|
MySQL8.0 | - | デフォルト |
MySQL8.4 | - | デフォルト |
RDS/Aurora(MySQL8.0互換) | デフォルト | - |
RDS/Aurora(MySQL8.4互換)※未リリース | ? | ? |
非推奨の認証プラグイン
mysql_native_password | caching_sha2_password | |
---|---|---|
MySQL8.0 | - | - |
MySQL8.4 | 非推奨 | - |
RDS/Aurora(MySQL8.0互換) | - | - |
RDS/Aurora(MySQL8.4互換)※未リリース | ? | ? |
デフォルトで無効の認証プラグイン
mysql_native_password | caching_sha2_password | |
---|---|---|
MySQL8.0 | - | - |
MySQL8.4 | デフォルトで無効 | - |
RDS/Aurora(MySQL8.0互換) | - | - |
RDS/Aurora(MySQL8.4互換)※未リリース | ? | ? |
(おまけ) caching_sha2_password から mysql_native_password への変更で何が変わるのか
ハッシュ化のアルゴリズムが変わる。
mysql_native_password | caching_sha2_password |
---|---|
SHA-1 | SHA-2 |
caching_sha2_password は SHA-2 の中でも SHA-256 を実装している。
8.4.1.2 Caching SHA-2 Pluggable Authentication
caching_sha2_password: Implements SHA-256 authentication (like the deprecated sha256_password), but uses caching on the server side for better performance and has additional features for wider applicability.
openssl コマンドで実際にハッシュ化を試してみるとこんな感じ。
SHA-1
% echo -n "ハッシュ化します" | openssl dgst -sha-1
SHA1(stdin)= 9af55b08e8651da8fd68407877baeb173f2d52d9
SHA-2(SHA-256)
% echo -n "ハッシュ化します" | openssl dgst -sha-256
SHA2-256(stdin)= 61c4935fe9e33d4da541086a0c60929ed187053eb2d32e31d82db838cb37f063
ビット数が100くらい変わるのでその分強度が増していそう。
感想
セキュリティ大事。移行の推奨情報などは感度高くキャッチしていきたい。
Discussion