validate_password 是 MySQL 5.6.6+ 內建插件,強制密碼複雜度策略,防止弱密碼。支援三級策略:LOW/MEDIUM/STRONG。
[mysqld]
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT # 強制載入,不可卸載
validate_password_policy=2 # 2=STRONG, 1=MEDIUM, 0=LOW
validate_password_length=12 # 最小長度
validate_password_mixed_case_count=1 # 至少 1 大寫 + 1 小寫
validate_password_number_count=1 # 至少 1 數字
validate_password_special_char_count=1 # 至少 1 特殊字符
# validate_password_dictionary_file=/path/to/dict # STRONG 級需字典檔
重啟 MySQL 後自動生效。
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
-- 註冊到 mysql.plugins 表,重啟自動載入
| 等級 | policy 值 | 檢查項目 |
|---|---|---|
| LOW | 0 | 僅長度 |
| MEDIUM | 1 | 長度 + 數字 + 大小寫 + 特殊字符 |
| STRONG | 2 | MEDIUM + 字典檔檢查(不可包含字典詞) |
-- 設置密碼測試
SET PASSWORD = PASSWORD('abc');
-- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
SET PASSWORD = PASSWORD('Abc123!@#');
-- Query OK
-- 查看當前策略變數
SHOW VARIABLES LIKE 'validate_password%';
-- 動態調整(立即生效,重啟失效)
SET GLOBAL validate_password_length = 10;
SET GLOBAL validate_password_policy = 1; -- MEDIUM
-- 永久生效需修改 my.cnf 並重啟
/usr/local/mysql/dict.txtvalidate_password_dictionary_file=/usr/local/mysql/dict.txtSET GLOBAL validate_password_dictionary_file=...SET PASSWORD、CREATE USER、ALTER USER 等設密操作UNINSTALL PLUGIN 導致策略失效INSTALL PLUGIN,否則主庫設密成功、從庫報錯導致複製中斷生產環境建議:policy=MEDIUM、length=10+、FORCE_PLUS_PERMANENT、配置字典檔升級 STRONG。兼顧安全與可用性,避免過於嚴格導致業務受阻。