原因 搭建的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/LOW
、1/MEDIUM
、2/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