ユーザー認証に使用する認証プラグインに関する設定

MySQL 8.0 より前はデフォルトの認証プラグインとして mysql_native_password が利用されてきましたが、 MySQL 8.0 以降は caching_sha2_password に変更となっています。そして MySQL 8.4 では mysql_native_password プラグインは無効となっているため利用することはできなくなりました。この記事では MySQL のユーザー認証に使用する認証プラグインについて簡単に解説します。

(Last modified: )

デフォルトの認証プラグインを確認する

MySQL でユーザーを作成した場合に、認証プラグインとして何が使用されるのかを確認してみます。次のようにユーザーを作成されてください。

create user tanaka@localhost identified by 'tanaka';

デフォルトの認証プラグインを確認する(1)

ユーザーが作成されました。それでは作成されたユーザーの認証プラグインを確認してみます。次のように実行してください。

select user, plugin from mysql.user where user = 'tanaka';

デフォルトの認証プラグインを確認する(2)

+--------+-----------------------+
| user   | plugin                |
+--------+-----------------------+
| tanaka | caching_sha2_password |
+--------+-----------------------+
1 row in set (0.00 sec)

作成したユーザーが使用する認証プラグインが caching_sha2_password になっていることが確認できます。

利用可能な認証プラグインの一覧を確認する

MySQL で利用可能な認証プラグインの一覧を確認するには次のように実行してください。

select plugin_name, plugin_status, plugin_type from information_schema.plugins where plugin_type="authentication";

利用可能な認証プラグインの一覧を確認する(1)

+-----------------------+---------------+----------------+
| plugin_name           | plugin_status | plugin_type    |
+-----------------------+---------------+----------------+
| sha256_password       | ACTIVE        | AUTHENTICATION |
| caching_sha2_password | ACTIVE        | AUTHENTICATION |
| mysql_native_password | DISABLED      | AUTHENTICATION |
+-----------------------+---------------+----------------+
3 rows in set (0.01 sec)

認証プラグインの一覧が表示されました。 sha256_password および caching_sha2_password はステータスが ACTIVE ですが、 mysql_native_password は現在ステータスが DISABLED となっており利用できません。

mysql_native_passwordプラグインを使用する

以前はデフォルトの認証プラグインを変更する場合、 my.ini ファイルを開き [mysqld] グループの default_authentication_plugin オプションに対して使用するプラグイン名を設定していましたが、現在は default_authentication_plugin オプションが削除されており、この設定を my.ini に記述するとエラーがログに出力されて MySQL が起動しません。

[mysqld]
default_authentication_plugin=mysql_native_password

どうしても mysql_native_password を使用する必要がある場合は my.ini ファイルを開き [mysqld] グループの mysql_native_password オプションに対して on を設定します。

[mysqld]
mysql_native_password=on

そのあとで MySQL を再起動し、あらためて MySQL で利用可能な認証プラグインの一覧を確認してみると次のように表示されます。

select plugin_name, plugin_status, plugin_type from information_schema.plugins where plugin_type="authentication";

mysql_native_passwordプラグインを使用する(1)

+-----------------------+---------------+----------------+
| plugin_name           | plugin_status | plugin_type    |
+-----------------------+---------------+----------------+
| sha256_password       | ACTIVE        | AUTHENTICATION |
| caching_sha2_password | ACTIVE        | AUTHENTICATION |
| mysql_native_password | ACTIVE        | AUTHENTICATION |
+-----------------------+---------------+----------------+
3 rows in set (0.01 sec)

mysql_native_password プラグラインもステータスが ACTIVE に変わりました。

それでは使用する認証プライグインを指定してユーザーを作成してみます。次のようにユーザーを作成されてください。

create user suzuki@localhost identified with mysql_native_password by 'suzuki';

mysql_native_passwordプラグインを使用する(2)

ユーザーが作成されました。それでは作成されたユーザーの認証プラグインを確認してみます。次のように実行してください。

select user, plugin from mysql.user where user = 'suzuki';

mysql_native_passwordプラグインを使用する(3)

+--------+-----------------------+
| user   | plugin                |
+--------+-----------------------+
| suzuki | mysql_native_password |
+--------+-----------------------+
1 row in set (0.00 sec)

作成したユーザーが使用する認証プラグインが mysql_native_password になっていることが確認できます。

このように現時点では mysql_native_password を使用することは可能ですが、今後利用されることはない認証プラグインですので何か特別な理由がなければ利用されないようにしてみてください。

-- --

MySQL の設定ファイルに対してデフォルトの認証プラグインに関する設定を記述する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。