MySQL 5.5+ 引入 validate_password 插件,強制執行密碼複雜度策略,防止弱密碼導致暴力破解、憑證填充攻擊。本文詳解插件安裝、參數配置、策略等級、字典文件、測試驗證及生產環境部署建議。
# my.cnf / my.ini [mysqld] 區塊 [mysqld] plugin-load=validate_password.so validate-password=FORCE_PLUS_PERMANENT # 強制載入,防止運行時卸載 # 可選:預設策略參數 (也可運行時動態調整) validate_password_policy=MEDIUM validate_password_length=12 validate_password_mixed_case_count=1 validate_password_number_count=1 validate_password_special_char_count=1
關鍵參數說明:
plugin-load:啟動時載入插件庫文件validate-password=FORCE_PLUS_PERMANENT:強制永久載入,即使 UNINSTALL PLUGIN 也無法卸載,防止惡意/誤操作降級安全策略ON (可卸載)、OFF (不載入)、FORCE (強制載入失敗則啟動中止)SHOW VARIABLES LIKE 'validate_password%';

| 參數 | 默認值 | 說明 | 動態修改 |
|---|---|---|---|
validate_password_policy | MEDIUM (1) | 策略等級:LOW(0)/MEDIUM(1)/STRONG(2) | SET GLOBAL 生效 |
validate_password_length | 8 | 最小長度 (所有策略生效) | SET GLOBAL 生效 |
validate_password_mixed_case_count | 1 | 至少包含大寫/小寫字母各 N 個 (MEDIUM/STRONG 生效) | SET GLOBAL 生效 |
validate_password_number_count | 1 | 至少包含數字 N 個 (MEDIUM/STRONG 生效) | SET GLOBAL 生效 |
validate_password_special_char_count | 1 | 至少包含特殊字符 N 個 (MEDIUM/STRONG 生效) | SET GLOBAL 生效 |
validate_password_dictionary_file | 空 | 字典文件路徑 (STRONG 策略生效),每行一個禁用弱密碼 | SET GLOBAL 生效 (需重新讀取文件) |
| 等級 | 檢查項目 | 典型通過示例 | 典型拒絕示例 |
|---|---|---|---|
| LOW (0) | 僅長度 ≥ validate_password_length | length=8: 12345678, abcdefgh | length=8: 1234567 (太短) |
| MEDIUM (1) 默認 | 長度 + 大小寫 + 數字 + 特殊字符 (各 ≥ 對應 _count) | length=8: Abc123!@, Passw0rd# | abc123!@ (無大寫)、Abcdef!@ (無數字)、Abc12345 (無特殊字符) |
| STRONG (2) | MEDIUM 全項 + 密碼不在字典文件中 | 同上 + 不在字典 | 字典含 Admin@123 → 拒絕 |
# my.cnf 生產建議 [mysqld] plugin-load=validate_password.so validate-password=FORCE_PLUS_PERMANENT validate_password_policy=MEDIUM validate_password_length=12 validate_password_mixed_case_count=1 validate_password_number_count=1 validate_password_special_char_count=1 # validate_password_dictionary_file=/etc/mysql/password_dictionary.txt # 核心賬號啟用 STRONG 時配置
special_char_count=0,並行改造應用GRANT ... IDENTIFIED BY 'weak' 會報錯,需先 CREATE USER 再 GRANT版本 插件名 庫文件 備註 5.5 - 5.6 validate_password validate_password.so 需手動安裝、配置 5.7 validate_password validate_password.so 默認隨服務器編譯,默認未啟用 8.0 validate_password validate_password.so 組件化架構: INSTALL COMPONENT 'file://component_validate_password';validate_password.policy參數名微調六、總結
validate_password是 MySQL 內建的「零成本」安全基線,強烈建議所有生產環境啟用。核心動作:
- 配置文件添加
plugin-load+FORCE_PLUS_PERMANENT- 設置
MEDIUM策略 +length≥12- 核心賬號啟用
STRONG+ 企業字典- 結合
PASSWORD EXPIRE INTERVAL 90 DAY+ACCOUNT LOCK構建完整賬號生命週期管理