mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

【问题】

有时候,只是为了自己测试,不想密码设置得那么复杂,譬如只想设置root的密码为123456。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

但是会报错:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements


【原因】

原来MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。
使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。影响的语句和函数有:create user,grant,set password,password(),old password。


【解决】

1) 查看mysql全局参数配置

该问题其实与mysql的validate_password_policy的值有关。
查看一下msyql密码相关的几个全局参数:

mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| 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      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)

2)参数解释

validate_password_dictionary_file
插件用于验证密码强度的字典文件路径。

validate_password_length
密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)

validate_password_mixed_case_count
密码至少要包含的小写字母个数和大写字母个数。

validate_password_number_count
密码至少要包含的数字个数。

validate_password_policy
密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
Policy                 Tests Performed                                                                                                        
0 or LOW               Length                                                                                                                      
1 or MEDIUM         Length; numeric, lowercase/uppercase, and special characters                             
2 or STRONG        Length; numeric, lowercase/uppercase, and special characters; dictionary file      

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

validate_password_special_char_count
密码至少要包含的特殊字符数。


3)修改mysql参数配置

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> 
mysql> 
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)


4)修改简单密码:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)


OK了,完美解决!


<think>嗯,用户遇到了MySQL的错误1819,提示密码不符合当前策略要求。首先,我需要回忆一下MySQL密码策略相关的内容。记得在MySQL 5.7之后,引入了密码验证插件,用来加强密码的安全性。这个错误通常是因为用户设置密码没有满足密码策略的要求,比如长度不够,或者没有包含足够的数字、大小写字母、特殊字符等。 接下来,我应该考虑如何帮助用户解决这个问题。可能需要先查看当前的密码策略设置,然后根据策略调整密码。或者,如果用户不需要这么严格的策略,也可以临时调整策略的等级,设置一个简单密码,之后再改回来。不过,通常建议保持一定的密码强度,尤其是生产环境中。 首先,用户可能需要以root身份登录MySQL,执行一些命令来查看当前的策略变量。比如,使用SHOW VARIABLES LIKE 'validate_password%'; 这个命令可以列出所有相关的参数。然后根据这些参数的要求,比如密码长度(validate_password_length)、是否需要数字(validate_password_number_count)、大小写(validate_password_mixed_case_count)和特殊字符(validate_password_special_char_count)等,来设置符合要求的密码。 如果用户觉得这些策略太严格,可能需要修改这些参数。比如,降低策略等级(validate_password_policy),可能的等级有0(低)、1(中)、2(强)。设置为0的话,可能只需要密码长度满足即可。但要注意,修改这些全局变量需要有足够的权限,可能需要使用SET GLOBAL命令,并且有些变量可能在运行时不能动态修改,需要修改配置文件后重启服务。 然后,用户需要按照新的策略设置密码,使用ALTER USER或者SET PASSWORD语句。例如,ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';。设置成功后,再根据需要是否恢复原来的策略等级。 不过,用户可能不太清楚具体步骤,或者遇到权限问题。比如,如果他们没有SUPER权限,可能无法修改全局变量。这时候可能需要检查他们的权限,或者引导他们修改配置文件并重启MySQL服务。 另外,用户可能是在安装MySQL后首次设置root密码时遇到这个问题,尤其是在Linux系统上使用临时密码登录后,需要立即修改密码,但设置密码不符合默认策略。这时候需要指导他们先调整策略,再修改密码,或者设置一个符合要求的复杂密码。 还需要提醒用户,在生产环境中,降低密码策略可能带来安全风险,建议尽量遵循策略要求,设置密码。如果密码太难记住,可以考虑使用密码管理工具。 可能还需要检查MySQL的版本,因为不同版本的默认策略可能不同。比如,某些版本可能默认策略是中等,而有些则是强。确认版本后,给出相应的建议。 总结来说,解决步骤大致是:登录MySQL,查看当前密码策略,根据策略设置符合要求的密码,或者调整策略等级再设置密码,最后恢复策略(如果需要)。同时,注意权限和配置文件修改的问题,以及安全方面的建议。</think>当MySQL报错`ERROR 1819 (HY000): Your password does not satisfy the current policy requirements`时,说明你设置密码不符合MySQL密码强度策略。以下是逐步解决方案: --- ### **1. 原因分析** MySQL默认启用了密码验证插件`validate_password`,它会检查密码是否符合以下规则(具体规则取决于策略等级): - 密码长度 - 是否包含数字、大小写字母、特殊字符 - 是否与用户名重复 --- ### **2. 查看当前密码策略** 以root用户登录MySQL后,执行以下命令查看策略: ```sql SHOW VARIABLES LIKE 'validate_password%'; ``` 输出示例: $$ \begin{aligned} &\text{validate_password_length} & 8 \\ &\text{validate_password_mixed_case_count} & 1 \\ &\text{validate_password_number_count} & 1 \\ &\text{validate_password_special_char_count} & 1 \\ &\text{validate_password_policy} & \text{MEDIUM} \end{aligned} $$ --- ### **3. 解决方案** #### **方法一:设置符合要求的密码** 根据当前策略调整密码,例如: - 长度至少8位 - 包含大小写字母、数字、特殊字符(如`Test@1234`) ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '符合要求的密码'; ``` --- #### **方法二:降低密码策略等级(仅限测试环境)** 如果临时需要简单密码,可修改策略: ```sql -- 设置策略等级为LOW(仅检查密码长度) SET GLOBAL validate_password_policy = LOW; -- 设置密码最小长度为4(默认8) SET GLOBAL validate_password_length = 4; -- 修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码'; ``` --- #### **方法三:禁用密码插件(不推荐)** 在配置文件`my.cnf`(或`my.ini`)中添加: ```ini [mysqld] validate_password = OFF ``` 重启MySQL服务使配置生效。 --- ### **4. 各策略等级说明** | 策略等级 (`validate_password_policy`) | 要求 | |--------------------------------------|--------------------------------------------------------------------| | `LOW` | 密码长度 ≥ `validate_password_length` | | `MEDIUM`(默认) | 密码需包含数字、大小写字母、特殊字符中至少两类 | | `STRONG` | 在MEDIUM基础上,密码不能与当前用户名匹配 | --- ### **5. 注意事项** - **生产环境**务必使用强密码,避免降低策略。 - 修改策略后需重新执行`ALTER USER`语句。 - 如果无权限修改变量,需检查用户是否有`SUPER`权限。 通过以上步骤,你可以灵活调整密码策略或设置符合要求的密码
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值