原因 搭建的centos7的mysql的yum源进行安装、准备做测试环境。第二天发现登录虚拟机进入mysql操作报错error:1820

mysql> SHOW DATABASES;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
Keep in mind that this does not affect any current connections the account has open.

更改用户密码:alter user 'root'@'localhost' identified by '111111';

输入以上语句,会提示:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirement.

MySQL5.7 加强了安全保障,以上意思是密码不符合安全策略要求,我们输入一个8位或以上长度,复杂一点的密码,比如:

mysql> alter user 'root'@'localhost' identified by '#20as3SElksds0ew98';
Query OK, 0 rows affected (0.00 sec)

也可以

ALTER USER USER() IDENTIFIED BY '新密码';
mysql> flush privileges;

做完以上操作就修改密码成功了,然后就不会再提示错误了。但是密码过于复杂除非放在文本里面、要不然记不住。

但是为什么会出现这密码更换的错误提示呢?

原因:

  • 是msyql密码安全策略(我的mysql是非源码编译、yum安装的)。
  • 是密码密码过期策略。

密码过期策略

**Payment Card Industry,即支付卡行业,PCI行业表示借记卡、信用卡、预付卡、电子钱包、ATM和POS卡及相关的业务。
PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数据安全措施。**

详见: https://www.pcisecuritystandards.org/documents/PCI_DSS_v3.pdf

PCI DSS标准要求用户每隔90天必须更改他们的密码。那么MySQL数据库该怎样适应这个情况?幸运的是,在MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间。

这个特性已经添加到mysql.user数据表,但是它的默认值是”N”。可以使用ALTER USER语句来修改这个值。

从MySQL 5.7.4版开始,用户的密码过期时间这个特性得以改进,可以通过一个全局变量default_password_lifetime来设置密码过期的策略,此全局变量可以设置一个全局的自动密码过期策略。

[mysqld]
default_password_lifetime=0

变量为数字0代表永不过期

Mysql密码安全策略

SHOW VARIABLES LIKE 'validate_password%';

图

参数解释


1).validate_password_dictionary_file 指定密码验证的文件路径;
2).validate_password_length 密码最小长度
3).validate_password_mixed_case_count 密码至少要包含的小写字母个数和大写字母个数;
4).validate_password_number_count 密码至少要包含的数字个数
5).validate_password_policy 密码强度检查等级,对应等级为:0/LOW1/MEDIUM2/STRONG,默认为1

注意:

0/LOW:只检查长度;
1/MEDIUM:检查长度、数字、大小写、特殊字符;
2/STRONG:检查长度、数字、大小写、特殊字符字典文件。

6).validate_password_special_char_count密码至少要包含的特殊字符数

创建用户时报错:

mysql> create user ‘dong’@’192.168.0.133’ IDENTIFIED BY ‘a364482611’;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

报错原因:密码强度不够。

解决方法:(该账号为测试账号,所以采用降低密码策略强度)

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

图

执行简单的密码命令成功

Mysql密码过期策略参考:http://blog.csdn.net/chszs/article/details/50651264

Last modification:February 10, 2020
如果觉得我的文章对你有用,请随意赞赏