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

広告

MariaDB ではユーザーを作成するときや、作成したあとでパスワードの有効期限を設定することができます。有効期限が切れた場合は MariaDB の設定によりますが MariaDB への接続ができなくなるか、接続は可能だけども実行できるのが SET PASSWORD 文だけになります。ここでは MariaDB でユーザーのパスワードの有効期限を設定する方法について解説します。

(2021 年 07 月 19 日公開 / 2021 年 07 月 19 日更新)

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

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 )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。