人為設置複雜密碼不可控、不可審計。validate_password 將策略內核化,**違規操作直接在 SQL 層攔截**,實現合規閉環。
[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 # 字典文件(STRONG 級生效,建議定期更新) # validate_password_dictionary_file=/etc/mysql/password_dict.txt
-- 查看當前 SHOW VARIABLES LIKE 'validate_password%'; -- 熱調整示例:升級到 STRONG 並加載字典 SET GLOBAL validate_password_policy=STRONG; SET GLOBAL validate_password_dictionary_file='/etc/mysql/dict_v2024.txt'; -- 臨時降級(緊急變更,事後必須恢復) SET GLOBAL validate_password_policy=LOW;
-- 1. 低強度測試
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=8;
SET PASSWORD = PASSWORD('short'); -- ERROR 1819 (長度不足)
SET PASSWORD = PASSWORD('longenough'); -- OK
-- 2. 中強度測試
SET GLOBAL validate_password_policy=MEDIUM;
SET PASSWORD = PASSWORD('LongEnough1'); -- ERROR 1819 (缺特殊字符)
SET PASSWORD = PASSWORD('LongEnough1!'); -- OK
-- 3. 高強度測試(需字典文件)
SET GLOBAL validate_password_policy=STRONG;
SET PASSWORD = PASSWORD('ComplexPass1!'); -- 可能被字典攔截
#!/bin/bash
# check_weak_passwords.sh
mysql -N -e "SELECT User,Host FROM mysql.user WHERE plugin='mysql_native_password';" | \
while read user host; do
# 這裡需結合常見弱密碼字典進行離線破解測試(如 John the Ripper)
# 發現弱密碼 → 工單通知 → 強制輪換
done
1819 映射為友好提示:「密碼需包含大小寫、數字、特殊字符,長度≥12」| 維度 | 指標 | 頻率 |
|---|---|---|
| 策略覆蓋率 | 啟用插件的實例 / 總實例 | 日巡檢 |
| 弱密碼存量 | 不符合當前策略的賬戶數 | 月審計 |
| 密碼輪換率 | 90天內修改密碼的賬戶比例 | 季度報告 |
| 字典更新 | 字典文件版本/更新時間 | 月更新 |
validate_password 為內置插件,默認未啟用validate_password 組件(Component),安裝方式變為 INSTALL COMPONENT 'file://component_validate_password';密碼策略不是「裝上插件就完事」,而是**配置基線化、字典動態化、審計常態化、應用協同化**的系統工程。