パスワードの有効期限を設定する
MariaDB ではユーザーを作成するときや、作成したあとでパスワードの有効期限を設定することができます。有効期限が切れた場合は MariaDB の設定によりますが MariaDB への接続ができなくなるか、接続は可能だけども実行できるのが SET PASSWORD 文だけになります。ここでは MariaDB でユーザーのパスワードの有効期限を設定する方法について解説します。
(Last modified: )
目次
ユーザーの作成時にパスワードの有効期限を設定する
MariaDB ではユーザーを作成するときにパスワードの有効期限を設定することができます。次の書式を使用します。
CREATE USER username IDENTIFIED BY 'password' PASSWORD EXPIRE INTERVAL N DAY
また作成済みのユーザーのパスワードの有効期限を変更する場合は次の書式を使用します。
ALTER USER username PASSWORD EXPIRE INTERVAL N DAY
ユーザー名とパスワードのほかに、パスワードの有効期限を日単位で指定します。
例えばパスワードの有効期限が 30 日のユーザーを作成する場合は次のように実行します。
create user tora@localhost identified by 'tiger' password expire interval 30 day;
パスワードの有効期限が 30 日に設定されたユーザーを作成することができました。
ユーザーに設定されているパスワードの有効期限を確認するには次のように実行してください。
show create user tora@localhost;
MariaDB では今のところこの方法でしか特定のユーザーに有効期限が設定されているかどうか確認できないようです。
作成済みのユーザーのパスワードの有効期限を設定する
次に作成済みのユーザーのパスワードの有効期限を変更してみます。まずはパスワードの有効期限を設定せずにユーザーを作成します。
create user shika@localhost identified by 'deer';
作成したユーザーのパスワードの有効期限を 10 日に変更するには次のように実行します。
alter user shika@localhost password expire interval 10 day;
パスワードの有効期限が 10 日に変更されました。それでは確認してみます。
パスワードの有効期限が変更されていることが確認できました。
デフォルトの設定としてパスワードの有効期限を設定する
MariaDB のデフォルトの設定としてパスワードに有効期限を設定することができます。この場合、明示的に設定しなければ、新しくユーザーを作成すると自動的にパスワードに有効期限が設定されます。
設定は my.ini ファイルの [mariadbd] グループに次のように記述します。
[mariadbd] default_password_lifetime=N
上記の場合は新しく作成するユーザーは、デフォルトの設定としてパスワードの有効期限が N 日に設定されます。この設定は作成済みのユーザーには影響ありません。あくまで設定変更後に作成した新しいユーザーにだけ影響します。
なお N に 0 を設定した場合はパスワードの有効期限は無効となります。
実際に試してみたところ、デフォルトの有効期限が設定されませんでした。原因が今のところ分からないのですが確認できたら更新します。
パスワードの有効期限を無効にする(有効期限を無制限にする)
パスワードの有効期限が設定されているユーザーに対してパスワードの有効期限を無効にする(パスワードの有効期限を無制限にする)には次の書式を使用します。
ALTER USER username PASSWORD EXPIRE NEVER
対象のユーザーのパスワードの有効期限を無効にします。
それでは実際に試してみます。現在パスワードの有効期限が 10 日に設定されているユーザーを対象にします。
このユーザーのパスワードの有効期限を無効にします。次のように実行してください。
alter user shika@localhost password expire never;
パスワードの有効期限が無効になりました。それでは確認してみます。
パスワードの有効期限が無効となっていることが確認できました。
手動でパスワードを期限切れに設定する
MariaDB では作成済みのユーザーのパスワードを手動で期限切れに設定することができます。次の書式を使用します。
ALTER USER username PASSWORD EXPIRE
対象のユーザーのパスワードを期限切れに設定します。
実際に試してみます。パスワードの有効期限が設定されていないユーザーを新しく作成します。
create user neko@localhost identified by 'cat';
このユーザーのパスワードを手動で有効期限切れに設定します。次のように実行してください。
alter user neko@localhost password expire;
該当ユーザーのパスワードが期限切れとなりました。
期限切れかどうか確認する
ユーザーを作成すると mysql データベースの user テーブルにデータが追加されますが、ユーザーのパスワードが期限切れになると user テーブルの password_expired カラムの値は Y になります(期限切れでない場合は N になっています)。次のように実行してください。
select user, host, password_expired from mysql.user;
先ほどパスワードを期限切れにしたユーザーの password_expired カラムの値が Y になっていることが確認できます。
パスワードが期限切れのユーザーに新しいパスワードを設定する
パスワードが期限切れになったユーザーは新しいパスワードを設定することで再びそのユーザーで MariaDB に接続できるようになります(別のページで解説しますが、パスワードの期限が切れていても MariaDB への接続と SET PASSWORD 文だけは実行できるようにすることもできます)。今回は管理者アカウントからパスワードが期限切れになっているユーザーに新しいパスワードを設定します。
set password for neko@localhost = password('cat2');
新しいパスワードが設定されました。それでは改めて mysql データベースの user テーブルを確認してみます。
select user, host, password_expired from mysql.user;
先ほど新しいパスワードを設定したユーザーの password_expired カラムの値が N になっていることが確認できます。
パスワードが期限切れになったあとで新しいパスワードを設定する
パスワードが期限切れになった場合、 MariaDB のデフォルトの設定では MariaDB に接続はできるけれども SET PASSWORD 以外は実行することができない状態となります。 SET PASSWORD を使って新しいパスワードを設定することでパスワードが期限切れの状態ではなくなります。
では実際に試してみます。次のようにパスワードの有効期限が切れた状態でユーザーを作成します。
create user neko@localhost identified by 'cat' password expire;
では MariaDB からの接続をいったん切ったあとで、先ほど作成したユーザーであらためて MariaDB へ接続してください。
mariadb -u neko -p
このようにパスワードの有効期限が切れた状態であっても、 MariaDB へ接続することができます。
次に何か SQL 文を実行をしてみます。次のように実行してみだください。
show databases;
「You must SET PASSWORD before executing this statement」というエラーが表示されて SQL 文を実行することができませんでした。 MariaDB に接続はできますが、基本的に許可されているのは SET PASSWORD を使った新しいパスワードの設定だけです。
それでは新しいパスワードを自分で設定しまみます。 SET PASSWORD 文を次のように実行してください。
set password for neko@localhost = password('newcat');
新しいパスワードを設定することができました。これでパスワードの有効期限が切れた状態が解消されています。あらためて先ほど実行できなかった SQL 文を実行してください。
今度は SQL 文を実行することができました。
-- --
MariaDB でユーザーのパスワードの有効期限を設定する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。