mysql創(chuàng)建賬號(hào)報(bào)錯(cuò)
1819 - Your password does not satisfy the current policy requirements
這個(gè)錯(cuò)誤表示密碼不符合 MySQL 的密碼策略要求。
根本原因分析
MySQL 5.7+ 版本默認(rèn)啟用了 validate_password 插件,強(qiáng)制執(zhí)行以下要求:
| 策略等級(jí) | 密碼長(zhǎng)度 | 大小寫(xiě)字母 | 數(shù)字 | 特殊字符 |
|---|---|---|---|---|
| LOW | ≥8字符 | 無(wú)要求 | 無(wú)要求 | 無(wú)要求 |
| MEDIUM (默認(rèn)) | ≥8字符 | ≥1大寫(xiě) +1小寫(xiě) | ≥1數(shù)字 | ≥1特殊字符 |
| STRONG | ≥8字符 | ≥1大寫(xiě) +1小寫(xiě) | ≥1數(shù)字 | ≥1特殊字符 + 字典檢查 |
解決方案一:創(chuàng)建符合策略的密碼(推薦)
創(chuàng)建滿(mǎn)足以下要求的密碼:
- 至少8個(gè)字符
- 包含至少1個(gè)大寫(xiě)字母(A-Z)
- 包含至少1個(gè)小寫(xiě)字母(a-z)
- 包含至少1個(gè)數(shù)字(0-9)
- 包含至少1個(gè)特殊字符(如 @、#、$、% 等)
-- 示例:創(chuàng)建滿(mǎn)足默認(rèn)策略的賬戶(hù)
CREATE USER 'secure_user'@'%' IDENTIFIED BY 'My$trongP@ss123';
-- 帶權(quán)限分配的完整語(yǔ)句示例
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'Secur3#App2023';
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
解決方案二:調(diào)整密碼策略(適合開(kāi)發(fā)環(huán)境)
1. 查看當(dāng)前密碼策略
SHOW VARIABLES LIKE 'validate_password%';
輸出示例:
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
2. 降低密碼策略要求(臨時(shí)方案)
-- 降低策略等級(jí)(0=OFF, 1=LOW, 2=MEDIUM, 3=STRONG)
SET GLOBAL validate_password_policy = LOW; -- 或0
-- 減小密碼最小長(zhǎng)度要求
SET GLOBAL validate_password_length = 4;
-- 重置特殊字符要求
SET GLOBAL validate_password_special_char_count = 0;
-- 然后創(chuàng)建賬號(hào)
CREATE USER 'dev_user'@'%' IDENTIFIED BY '1234';
3. 永久修改策略(修改配置文件)
編輯 my.cnf 或 my.ini 文件:
[mysqld]
# 完全禁用密碼驗(yàn)證
# validate_password = OFF
# 或設(shè)置自定義策略
validate_password_policy = LOW
validate_password_length = 6
validate_password_mixed_case_count = 0
validate_password_number_count = 0
validate_password_special_char_count = 0
解決方案三:完全禁用密碼策略(僅用于測(cè)試)
方法1:卸載插件
UNINSTALL PLUGIN validate_password;
CREATE USER 'test_user'@'%' IDENTIFIED BY '123';
方法2:?jiǎn)?dòng)時(shí)禁用
mysqld --validate_password=OFF
密碼策略說(shuō)明
| 策略變量 | 說(shuō)明 | 默認(rèn)值 | 推薦值(生產(chǎn)) |
|---|---|---|---|
| validate_password_policy | 策略等級(jí) | MEDIUM | STRONG |
| validate_password_length | 最小長(zhǎng)度 | 8 | ≥12 |
| validate_password_mixed_case_count | 混合大小寫(xiě)要求 | 1 | 1 |
| validate_password_number_count | 數(shù)字要求 | 1 | 1 |
| validate_password_special_char_count | 特殊字符要求 | 1 | 1 |
| validate_password_dictionary_file | 字典文件路徑 | 空 | 設(shè)置路徑 |
恢復(fù)密碼策略最佳實(shí)踐(生產(chǎn)環(huán)境)
-- 設(shè)置強(qiáng)密碼策略
SET GLOBAL validate_password_policy = STRONG;
SET GLOBAL validate_password_length = 12;
SET GLOBAL validate_password_mixed_case_count = 1;
SET GLOBAL validate_password_number_count = 1;
SET GLOBAL validate_password_special_char_count = 1;
-- 修改現(xiàn)有弱密碼賬戶(hù)
ALTER USER 'weak_user'@'%' IDENTIFIED BY 'New$trongP@ss123!';
驗(yàn)證密碼強(qiáng)度
SELECT VALIDATE_PASSWORD_STRENGTH('abc'); -- 返回分?jǐn)?shù)(0-100)
SELECT * FROM mysql.USER;
不同MySQL版本的注意事項(xiàng)
| MySQL 版本 | 特性差異 |
|---|---|
| 5.7.x | 默認(rèn)啟用策略,變量前綴為validate_password_
|
| 8.0.x | 支持密碼過(guò)期策略,新增validate_password.dictionary_file參數(shù) |
| 5.6.x | 需要手動(dòng)安裝validate_password插件 |
| MariaDB | 使用simple_password_check插件而非validate_password
|
生產(chǎn)環(huán)境建議:始終使用強(qiáng)密碼策略(STRONG級(jí)別),避免使用字典單詞,定期輪換密碼,并通過(guò)安全存儲(chǔ)系統(tǒng)保管密碼憑證。