PCI DSS 要求用戶每 90 天輪換密碼。MySQL 5.6.6 引入 password_expired,5.7.4 進一步增加全局變數 default_password_lifetime 與 ALTER USER ... PASSWORD EXPIRE INTERVAL 精細控制。本文系統梳理版本演進、配置方法、運維自動化與帳號鎖定新特性。
| 版本 | 特性 | 關鍵語法 |
|---|---|---|
| 5.6.6 | 用戶級密碼過期標記 | ALTER USER 'user'@'host' PASSWORD EXPIRE; |
| 5.7.4 | 全局自動過期策略 | default_password_lifetime=N |
| 5.7.6 | ALTER USER 修改密碼 | ALTER USER USER() IDENTIFIED BY 'newpwd'; |
| 5.7.8 | 帳號鎖定/解鎖 | CREATE USER ... ACCOUNT LOCK / ALTER USER ... ACCOUNT UNLOCK |
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE;
效果:用戶仍可登入,但執行任何查詢報錯:
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
用戶必須修改密碼後恢復正常:
SET PASSWORD = PASSWORD('new_strong_password');
[mysqld] default_password_lifetime = 90 # 90 天自動過期,0 表示永不過期 (預設值)
SET GLOBAL default_password_lifetime = 90;
# 指定間隔天數 ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY; # 禁用過期 ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER; # 使用全局預設 ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;
CREATE USER 'furrywall'@'localhost' IDENTIFIED BY 'pwd123' ACCOUNT LOCK;
登入嘗試報錯:
ERROR 3118 (HY000): Access denied for user 'furrywall'@'localhost'. Account is locked.
ALTER USER 'furrywall'@'localhost' ACCOUNT UNLOCK; ALTER USER 'furrywall'@'localhost' ACCOUNT LOCK;
mysql.user 中 password_expired='Y' 或 password_last_changed 超過策略天數的用戶,發送郵件通知。validate_password 插件強制長度、大小寫、數字、特殊字符。password_history 禁止重用近 N 次密碼。ALTER USER、SET PASSWORD 操作,滿足合規審計。密碼過期與帳號鎖定是資料庫安全合規的基石。結合全局策略、單用戶覆蓋、自動化巡檢與強密碼插件,構建「預防-檢測-響應」閉環,才能真正落地 PCI DSS 等合規要求。