MySQLでは、セキュリティ強化のためにユーザーのパスワードに有効期限を設定できます。管理者は、ユーザーのパスワードがいつ失効するかを確認し、必要に応じて更新する必要があります。以下では、関連するシステムテーブルとSQLクエリを用いて、ユーザーのパスワード有効期限情報を取得する方法を解説します。
関連システムテーブルとカラム
MySQLのユーザー情報は mysql.user テーブルに格納されています。パスワードの有効期限に関連する主なカラムは以下の通りです:
User:ユーザー名Host:接続元ホストpassword_expired:パスワードが強制的に失効しているか('Y'または'N')password_last_changed:パスワード最終変更日時password_lifetime:パスワードの有効期間(日数、MySQL 5.7以降)
パスワード有効期限の確認クエリ
特定ユーザーのパスワード状態を確認するには、以下のようなクエリを使用します。
1. パスワードが失効しているか確認
SELECT User, Host, password_expired
FROM mysql.user
WHERE User = 'app_user' AND Host = '192.168.%';
2. パスワード最終変更日を取得
SELECT User, Host, password_last_changed
FROM mysql.user
WHERE User = 'app_user' AND Host = '192.168.%';
3. 有効期限日を動的に計算(固定期間の場合)
SELECT
User,
Host,
password_last_changed,
DATE_ADD(password_last_changed, INTERVAL 45 DAY) AS expiry_date
FROM mysql.user
WHERE User = 'app_user' AND Host = '192.168.%';
4. ユーザーに設定された有効期間に基づく期限計算
SELECT
User,
Host,
password_last_changed,
password_lifetime,
CASE
WHEN password_lifetime IS NOT NULL
THEN DATE_ADD(password_last_changed, INTERVAL password_lifetime DAY)
ELSE NULL
END AS calculated_expiry
FROM mysql.user
WHERE User = 'app_user' AND Host = '192.168.%';
パスワード有効期間の設定
既存ユーザーのパスワード有効期間を変更するには、ALTER USER 文を使用します。
ALTER USER 'app_user'@'192.168.%' PASSWORD EXPIRE INTERVAL 90 DAY;
このコマンドにより、次回パスワード変更から90日後に自動的に失効するようになります。
実運用における注意点
password_last_changed が NULL の場合、そのユーザーはパスワードポリシーの対象外であるか、アカウントが新規作成直後である可能性があります。また、password_expired = 'Y' のユーザーは、ログイン時にパスワード変更を強制されます。