MySQL 5.5 引入 validate_password 插件,可在資料庫層面強制執行密碼策略,阻擋弱密碼入庫。本文詳解插件啟用、參數調優、策略分級與實戰驗證全流程。
編輯 my.cnf [mysqld] 區塊:
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
FORCE_PLUS_PERMANENT 表示強制載入且不可運行時卸載,防繞過。重啟 MySQL 生效。
執行 SHOW VARIABLES LIKE 'validate%'; 查看當前配置:
| 參數 | 預設值 | 說明 | 建議生產值 |
|---|---|---|---|
| validate_password_policy | MEDIUM (1) | 策略等級:LOW/MEDIUM/STRONG | MEDIUM 或 STRONG |
| validate_password_length | 8 | 最小長度 | 12+ |
| validate_password_mixed_case_count | 1 | 大小寫字母最少個數 | 2 |
| validate_password_number_count | 1 | 數字最少個數 | 2 |
| validate_password_special_char_count | 1 | 特殊字符最少個數 | 2 |
| validate_password_dictionary_file | 空 | STRONG 模式下的禁用字典路徑 | /etc/mysql/dict.txt |
無需重啟,即時生效:
SET GLOBAL validate_password_policy=STRONG;
SET GLOBAL validate_password_length=16;
SET GLOBAL validate_password_dictionary_file='/etc/mysql/weakpass.txt';
-- 長度不足且無大寫
CREATE USER 'test'@'%' IDENTIFIED BY 'abc123';
-- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
-- 長度達標但無大寫
CREATE USER 'test2'@'%' IDENTIFIED BY 'abcdefghijkl';
-- ERROR 1819 (HY000): ...
weakpass.txt,包含常見弱密碼、企業名、產品名等資料庫層面的強制策略是最後一道防線,配合應用層多重驗證,才能構建完整的憑證安全體系。