パスワードの有効期限を設定する

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;

ユーザーの作成時にパスワードの有効期限を設定する(1)

パスワードの有効期限が 30 日に設定されたユーザーを作成することができました。

ユーザーに設定されているパスワードの有効期限を確認するには次のように実行してください。

show create user tora@localhost;

ユーザーの作成時にパスワードの有効期限を設定する(2)

MariaDB では今のところこの方法でしか特定のユーザーに有効期限が設定されているかどうか確認できないようです。

作成済みのユーザーのパスワードの有効期限を設定する

次に作成済みのユーザーのパスワードの有効期限を変更してみます。まずはパスワードの有効期限を設定せずにユーザーを作成します。

create user shika@localhost identified by 'deer';

ユーザーの作成時にパスワードの有効期限を設定する(3)

作成したユーザーのパスワードの有効期限を 10 日に変更するには次のように実行します。

alter user shika@localhost password expire interval 10 day;

ユーザーの作成時にパスワードの有効期限を設定する(4)

パスワードの有効期限が 10 日に変更されました。それでは確認してみます。

ユーザーの作成時にパスワードの有効期限を設定する(5)

パスワードの有効期限が変更されていることが確認できました。

デフォルトの設定としてパスワードの有効期限を設定する

MariaDB のデフォルトの設定としてパスワードに有効期限を設定することができます。この場合、明示的に設定しなければ、新しくユーザーを作成すると自動的にパスワードに有効期限が設定されます。

設定は my.ini ファイルの [mariadbd] グループに次のように記述します。

[mariadbd]
default_password_lifetime=N

上記の場合は新しく作成するユーザーは、デフォルトの設定としてパスワードの有効期限が N 日に設定されます。この設定は作成済みのユーザーには影響ありません。あくまで設定変更後に作成した新しいユーザーにだけ影響します。

なお N に 0 を設定した場合はパスワードの有効期限は無効となります。

実際に試してみたところ、デフォルトの有効期限が設定されませんでした。原因が今のところ分からないのですが確認できたら更新します。

パスワードの有効期限を無効にする(有効期限を無制限にする)

パスワードの有効期限が設定されているユーザーに対してパスワードの有効期限を無効にする(パスワードの有効期限を無制限にする)には次の書式を使用します。

ALTER USER username 
  PASSWORD EXPIRE NEVER

対象のユーザーのパスワードの有効期限を無効にします。

それでは実際に試してみます。現在パスワードの有効期限が 10 日に設定されているユーザーを対象にします。

パスワードの有効期限を無効にする(有効期限を無制限にする)(1)

このユーザーのパスワードの有効期限を無効にします。次のように実行してください。

alter user shika@localhost password expire never;

パスワードの有効期限を無効にする(有効期限を無制限にする)(2)

パスワードの有効期限が無効になりました。それでは確認してみます。

パスワードの有効期限を無効にする(有効期限を無制限にする)(3)

パスワードの有効期限が無効となっていることが確認できました。

手動でパスワードを期限切れに設定する

MariaDB では作成済みのユーザーのパスワードを手動で期限切れに設定することができます。次の書式を使用します。

ALTER USER username PASSWORD EXPIRE

対象のユーザーのパスワードを期限切れに設定します。

実際に試してみます。パスワードの有効期限が設定されていないユーザーを新しく作成します。

create user neko@localhost identified by 'cat';

手動でパスワードを期限切れに設定する(1)

このユーザーのパスワードを手動で有効期限切れに設定します。次のように実行してください。

alter user neko@localhost password expire;

手動でパスワードを期限切れに設定する(2)

該当ユーザーのパスワードが期限切れとなりました。

期限切れかどうか確認する

ユーザーを作成すると mysql データベースの user テーブルにデータが追加されますが、ユーザーのパスワードが期限切れになると user テーブルの password_expired カラムの値は Y になります(期限切れでない場合は N になっています)。次のように実行してください。

select user, host, password_expired from mysql.user;

手動でパスワードを期限切れに設定する(3)

先ほどパスワードを期限切れにしたユーザーの password_expired カラムの値が Y になっていることが確認できます。

パスワードが期限切れのユーザーに新しいパスワードを設定する

パスワードが期限切れになったユーザーは新しいパスワードを設定することで再びそのユーザーで MariaDB に接続できるようになります(別のページで解説しますが、パスワードの期限が切れていても MariaDB への接続と SET PASSWORD 文だけは実行できるようにすることもできます)。今回は管理者アカウントからパスワードが期限切れになっているユーザーに新しいパスワードを設定します。

set password for neko@localhost = password('cat2');

手動でパスワードを期限切れに設定する(4)

新しいパスワードが設定されました。それでは改めて mysql データベースの user テーブルを確認してみます。

select user, host, password_expired from mysql.user;

手動でパスワードを期限切れに設定する(3)

先ほど新しいパスワードを設定したユーザーの password_expired カラムの値が N になっていることが確認できます。

パスワードが期限切れになったあとで新しいパスワードを設定する

パスワードが期限切れになった場合、 MariaDB のデフォルトの設定では MariaDB に接続はできるけれども SET PASSWORD 以外は実行することができない状態となります。 SET PASSWORD を使って新しいパスワードを設定することでパスワードが期限切れの状態ではなくなります。

では実際に試してみます。次のようにパスワードの有効期限が切れた状態でユーザーを作成します。

create user neko@localhost identified by 'cat' password expire;

パスワードが期限切れになったあとで新しいパスワードを設定する(1)

では MariaDB からの接続をいったん切ったあとで、先ほど作成したユーザーであらためて MariaDB へ接続してください。

mariadb -u neko -p

パスワードが期限切れになったあとで新しいパスワードを設定する(2)

このようにパスワードの有効期限が切れた状態であっても、 MariaDB へ接続することができます。

次に何か SQL 文を実行をしてみます。次のように実行してみだください。

show databases;

パスワードが期限切れになったあとで新しいパスワードを設定する(3)

「You must SET PASSWORD before executing this statement」というエラーが表示されて SQL 文を実行することができませんでした。 MariaDB に接続はできますが、基本的に許可されているのは SET PASSWORD を使った新しいパスワードの設定だけです。

それでは新しいパスワードを自分で設定しまみます。 SET PASSWORD 文を次のように実行してください。

set password for neko@localhost = password('newcat');

パスワードが期限切れになったあとで新しいパスワードを設定する(4)

新しいパスワードを設定することができました。これでパスワードの有効期限が切れた状態が解消されています。あらためて先ほど実行できなかった SQL 文を実行してください。

パスワードが期限切れになったあとで新しいパスワードを設定する(5)

今度は SQL 文を実行することができました。

-- --

MariaDB でユーザーのパスワードの有効期限を設定する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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