MySQL 創(chuàng)建賬號(hào)報(bào)錯(cuò) 1819 - Your password does not satisfy the current policy requirements

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.cnfmy.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)保管密碼憑證。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容