🥷

最近のMySQLのデフォルト認証プラグインの変遷とAWS RDS/Auroraの対応状況をまとめた

2024/07/28に公開

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 へ変更された。

6.4.1.2 SHA-2 プラガブル認証のキャッシュ

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