認証プラグインを指定してユーザーを作成する
MySQL ではユーザー認証を行うときに認証プラグインを使います。複数の認証プラグインが存在し、 MySQL 8.0.4 以前と以降ではデフォルトで使用される認証プラグインが変更になりました。ここでは MySQL でユーザーを作成する時に使用する認証プラグインに関する設定を行う方法を解説します。
(Last modified: )
デフォルトの認証プラグインについて
MySQL に接続する時にユーザー認証が行われますが、認証を行う方式として認証プラグインと呼ばれるものを使用します。以前のバージョンの MySQL ではデフォルトで使用していた認証プラグインが mysql_native_password でしたげ、 MySQL 8.04 以降は caching_sha2_password に変更となりました。そのためユーザーアカウントを作成する時に明示的に指定しなければデフォルトの caching_sha2_password が認証プラグインとして使用されるようになっています。
それでは最初に現在のデフォルトの認証プラグインを確認してみます。次のように実行してください。
show variables like 'default_authentication_plugin';
default_authentication_plugin の値が caching_sha2_password となっていることが確認できます。
デフォルトの認証プラグインとして何を使用するかについては設定ファイルである my.ini ファイルで次のように定義されています。
[mysqld]
default_authentication_plugin=caching_sha2_password
あとで実際に試してみますが、デフォルトの認証プラグインは my.ini ファイルを設定することで変更することができます。
認証プラグインを指定してユーザーを作成する
最初に認証プラグインを指定せずにユーザーを作成してみます。次のように実行してください。
create user tora@localhost identified by 'tiger';
作成したユーザーの認証プラグインの設定を確認してみます。
select user, host, plugin from mysql.user where user = 'tora';
認証プラグインを指定せずにユーザーを作成した場合にはデフォルトの認証プラグインである caching_sha2_password が使用されるように設定されていました。
次に使用する認証プラグインを指定してユーザーを作成してみます。書式は次の通りです。
CREATE USER user IDENTIFIED WITH auth_plugin BY 'auth_string'
ユーザー名( user )、パスワード( 'auth_string' )、に加えて使用する認証プラグイン( auth_plugin )を指定します。今回は認証プラグインとして mysql_native_password を指定して次のように実行しました。
create user okami@localhost identified with mysql_native_password by 'wolf';
作成したユーザーの認証プラグインの設定を確認してみます。
select user, host, plugin from mysql.user where user = 'okami';
認証プラグインが指定した mysql_native_password に設定されていることが確認できます。
使用する認証プラグインを変更する
新しくデフォルトになった認証プラグインはセキュリティ面での向上などが行われているそうです。ただ MySQL ではサーバ側とクライアント側で同じ認証プラグインに対応する必要があり、使用されているクライアントによっては新しい認証プラグインである caching_sha2_password に対応していないケースも多くあるようです。
クライアント側で以前から利用されている mysql_native_password を使用する場合には、ユーザーが使用する認証プラグインも mysql_native_password に設定する必要があります。
使用する認証プラグインとして caching_sha2_password が設定されて作成済のユーザーを、あとから認証プラグインを変更するには次の書式を使用します。
ALTER USER user IDENTIFIED WITH auth_plugin BY 'auth_string'
変更するユーザー名( user )、パスワード( 'auth_string' )、に加えて使用する認証プラグイン( auth_plugin )を指定します。今回は認証プラグインとして caching_sha2_password を使用しているユーザーの認証プラグインを mysql_native_password 変更するように次のように実行しました。
alter user tora@localhost identified with mysql_native_password by 'tiger';
ユーザーの認証プラグインの設定を確認してみます。
select user, host, plugin from mysql.user where user = 'tora';
認証プラグインが指定した mysql_native_password に変更されていることが確認できます。
デフォルトの認証プラグインを変更する
デフォルトの認証プラグインについては先に記載した通り設定ファイル my.ini にて記述されています。変更する場合は my.ini を書き換えて保存したあと MySQL を再起動して新しい設定を読み込んでください。
今回は次のようにデフォルトの認証プラグインを mysql_native_password に設定しました。
[mysqld]
default_authentication_plugin=caching_sha2_password
MySQL を再起動したあとにあらためて現在のデフォルトの認証プラグインを確認してみます。次のように実行してください。
show variables like 'default_authentication_plugin';
default_authentication_plugin の値が mysql_native_password となっていることが確認できます。
なおデフォルトの認証プラグインというのは、ユーザーを作成する時に認証プラグインを指定しなかった場合にデフォルトで設定される認証プラグインを設定するものです。デフォルトの認証プラグインを変更しても作成済みのユーザーが使用する認証プラグインが変更されることはありません。また明示的に指定すれば任意の認証プラグインを使用するユーザーを作成することができます。
-- --
ユーザー認証を行う時に使用される認証プラグインについての解説と、認証プラグインを指定してユーザーを作成する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。