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

MySQL とのユーザー認証の時に使用されるパスワードに関して、有効期限を設定して新しいパスワードに変更を促すメッセージを表示させることができます。ここでは MySQL で認証の際に使用するパスワードの有効期限を設定する方法について解説します。

(Last modified: )

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

MySQL では認証に必要となるパスワードの有効期限が切れた場合、現在のパスワードで認証をして MySQL に接続することはできますが、接続後に何か操作をしようとするとエラーが表示されて新しいパスワードを設定するまで操作を行うことができなくなります。

特定のユーザーパスワードを手動で期限切れに設定する場合、次の書式を使います。

ALTER USER user PASSWORD EXPIRE

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

では実際に試してみます、 root ユーザーなど権限をもったユーザーで MySQL に接続したあと、次のように実行して下さい。今回は honda@localhost ユーザーのパスワードを期限切れにします。

alter user honda@localhost password expire;

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

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

では MySQL との接続を一度切り、先ほどパスワードを期限切れにしたユーザーで MySQL に接続してみます。

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

パスワードが期限切れであっても MySQL との接続は行うことができます。では何かコマンドを実行してみてください。

select version();

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

何かコマンドを実行しようとしても You must reset your password using ALTER USER statement before executing this statement. というエラーが表示されて実行することができませんでしたユーザーは自分自身で ALTER USER 文を使って新しいパスワードを設定するまでは何も行うことができないです。

では新しいパスワードを設定してみます。

alter user honda@localhost identified by 'honda2';

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

新しいパスワードが設定されました。これでパスワードが期限切れの状態ではなくなります。

ではあらためて先ほど実行できなかったコマンドを実行してみます。

select version();

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

今度はコマンドを実行することができました。このようにパスワードが期限切れになった場合は、 MySQL に接続後に新しいパスワードを設定する必要があります。

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

先ほどは手動でパスワードを即座に期限切れに設定しましたが、有効期限を設定し有効期限が到達するたびに新しいパスワードの設定が必要になるように設定することができます。

作成済みのユーザーに対してパスワードの有効期限を設定するには次の書式を使います。

ALTER USER user PASSWORD EXPIRE INTERVAL N DAY

対象のユーザー( user )のパスワードを N 日に設定します。新しいパスワードに設定してから N 日経過するごとに新しいパスワードを設定する必要があります。

またパスワードの有効期限を設定した新しいユーザーを作成する場合は次の書式を使います。

CREATE USER user IDENTIFIED BY 'auth_string' PASSWORD EXPIRE INTERVAL N DAY

新しく作成するユーザー( user )のパスワードを N 日に設定します。新しいパスワードに設定してから N 日経過するごとに新しいパスワードを設定する必要があります。

それでは作成済みの honda@localhost ユーザーのパスワードの有効期限を 90 日に設定してみます。 root ユーザーなど権限をもったユーザーで MySQL に接続したあと、次のように実行して下さい。

alter user honda@localhost password expire interval 90 day;

パスワードに有効期限を設定する(1)

以前に有効期限を設定せずに作成したユーザーと、有効期限を設定して新しく作成したユーザーのパスワードの有効期限をそれぞれ確認してみます。

select user, host, password_lifetime from mysql.user where user = 'honda' or user = 'suzuki';

パスワードに有効期限を設定する(2)

以前に作成したユーザーの有効期限は NULL となっているのに対して、有効期限を設定して作成したユーザーは有効期限が 90 日に設定されていることが確認できます。

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

新しいユーザーを作成する時に、デフォルトで設定されるパスワードの有効期限を設定する方法です。設定ファイルの my.ini ファイルを開き、 [mysqld] のブロックで default_password_lifetime に対して値を設定します。

例えばデフォルトのパスワードの有効期限を 45 日に設定する場合は次のように記述します。(なお有効期限を無期限に設定する場合は 0 を指定します)。

[mysqld]

default_password_lifetime=45

パスワードのデフォルトの有効期限を設定する(1)

設定が終わりましたら my.ini ファイルを保存したあと MySQL を再起動してください。

この設定を行うと、明示的にパスワードの有効期限が設定されていないユーザーについては、最後にパスワードの変更を行ってから(変更したことがなければユーザーを作成した日)設定した日数(今回であれば 45 日)経過するとパスワードが期限切れとなります。

作成済みのユーザーに関して、 password_lifetime と password_last_changed について情報を取得してみます。

select user, host, password_lifetime, password_last_changed from mysql.user;

パスワードのデフォルトの有効期限を設定する(2)

明示的にパスワードの有効期限が設定されていないユーザーは password_lifetime が NULL になっています。これらのユーザーについてはMySQLに接続したときに、最後にパスワードが変更された日時を保存している password_last_changed と接続した日の日時を比較し、 default_password_lifetime で設定された期間を過ぎているとパスワードが期限切れとなります。

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

パスワードのデフォルトの有効期限である default_password_lifetime が設定されていても、パスワードの有効期限を無期限に設定したい場合には、対象のユーザーに対して次のように実行してください。

ALTER USER user PASSWORD EXPIRE NEVER

では suzuki@localhost ユーザーに対してパスワードの有効期限を無期限に設定してみます。

alter user suzuki@localhost password expire never;

パスワードのデフォルトの有効期限(3)

改めて作成済みのユーザーに関して、 password_lifetime と password_last_changed について情報を取得してみます。

select user, host, password_lifetime, password_last_changed from mysql.user;

パスワードのデフォルトの有効期限(4)

該当ユーザーの password_lifetime が 0 に設定されました。これで default_password_lifetime が設定されている場合でも、このユーザーに関してはパスワードが期限切れになることはありません。

-- --

MySQL に接続する時のパスワードに関して、有効期限を設定する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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