MySQLユーザーのパスワード有効期限を確認する方法

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_changedNULL の場合、そのユーザーはパスワードポリシーの対象外であるか、アカウントが新規作成直後である可能性があります。また、password_expired = 'Y' のユーザーは、ログイン時にパスワード変更を強制されます。

タグ: MySQL データベースセキュリティ ユーザーアカウント管理

5月27日 03:31 投稿