首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 用戶密碼過期策略完整指南:從 5.6 到 5.7 的演進與實戰

     編輯:MySQL 綜合教學

MySQL 用戶密碼過期策略完整指南:從 5.6 到 5.7 的演進與實戰

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.6ALTER USER 修改密碼ALTER USER USER() IDENTIFIED BY 'newpwd';
5.7.8帳號鎖定/解鎖CREATE USER ... ACCOUNT LOCK / ALTER USER ... ACCOUNT UNLOCK

二、5.6/5.7 通用:手動標記過期

ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE;

效果:用戶仍可登入,但執行任何查詢報錯:

ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

用戶必須修改密碼後恢復正常:

SET PASSWORD = PASSWORD('new_strong_password');

三、5.7.4+:全局自動過期策略

1. 配置檔設定 (永久)

[mysqld]
default_password_lifetime = 90  # 90 天自動過期,0 表示永不過期 (預設值)

2. 運行時動態調整

SET GLOBAL default_password_lifetime = 90;

3. 單用戶覆蓋全局策略

# 指定間隔天數
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;

# 禁用過期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;

# 使用全局預設
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;

四、5.7.6+:ALTER USER 修改密碼 (替代 SET PASSWORD)

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;

六、運維自動化建議

  1. Cron 定時掃描:每日檢查 mysql.user 中 password_expired='Y' 或 password_last_changed 超過策略天數的用戶,發送郵件通知。
  2. 密碼複雜度:配合 validate_password 插件強制長度、大小寫、數字、特殊字符。
  3. 歷史密碼:5.7+ 支援 password_history 禁止重用近 N 次密碼。
  4. 審計日誌:記錄 ALTER USER、SET PASSWORD 操作,滿足合規審計。

七、官方參考文檔

密碼過期與帳號鎖定是資料庫安全合規的基石。結合全局策略、單用戶覆蓋、自動化巡檢與強密碼插件,構建「預防-檢測-響應」閉環,才能真正落地 PCI DSS 等合規要求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved