关于mysql5.6.X和mysql8.0.X配置密码过期策略的学习心得

本文章通过windows系统navicat软件实际操作(命令行登录mysql也可以),对比了mysql5.6.Xmysql8.0.X版本配置密码过期策略的过程,并把其中的一些学习心得记录在此。

mysql密码过期策略与版本:

一、自MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户是否过期的开关,其中该字段包含Y/N,Y表示打开,N表示关闭,默认为N。

二、自MySQL版本5.7.4版本起,可以通过全局变量default_password_lifetime来设置全局的密码过期策略。

  • 在MySQL5.7.4 ~ 5.7.10版本中,default_password_lifetime默认值是360,表示360天。
  • 在MySQL5.7.11以后,default_password_lifetime默认值是0,表示永不过期

:mysq5.7之后的版本mysql.user表新增了两个字段来控制密码:
password_last_changed:记录密码最近修改的时间
password_lifetime:设置密码的有效时间,天数
另外,mysql5.7之后的版本将自带validate_password插件,这个插件是一个新密码校验插件,在mysql5.6的版本可以通过安装引入。

一、mysql5.6.X配置密码过期策略

添加了password_expired功能,允许设置用户密码是否过期。如:设置test用户密码过期

ALTER USER 'test'@'localhost' PASSWORD EXPIRE;

设置test用户密码过期后,password_expired的值变为Y,若重新登陆mysql,需要重新设置用户密码才能登录。

set password for test@localhost = password('新密码');

虽然mysql5.6.X版本已添加了password_expired功能,但安全性不够。考虑到mysql数据库的安全性,若要启用密码过期策略,则需安装validate_password插件

####以下均为mysql语句###
# 查看mysql插件命令
show plugins; 
# 安装插件
install plugin validate_password soname 'validate_password.dll';
# 卸载插件
uninstall plugin validate_password;

navicat查询结果展示,这样表示安装成功
navicat查询结果展示

# 查看默认密码策略
show variables like  'validate_password%';

navicat查询结果展示
在这里插入图片描述

参数说明:
validate_password_check_user_name :默认关闭,设置为ON时可以将密码设置成当前用户名
validate_password_dictionary_file :检查密码的字典文件的路径名
validate_password_length:密码最小长度
validate_password_mixed_case_count:最少需要拥有的大小写字母数(同时拥有大写和小写字母)
validate_password_number_count:最少需要拥有的数字个数
validate_password_special_char_count:最少需要拥有的特殊字符数

validate_password_policy:表示密码策略,默认为MEDIUM,有三个取值范围:

取值范围含义
0 or LOW表示只需要符合密码长度即可
1 or MEDIUM表示在满足LOW策略的同时,还需要满足至少有一个数字,一个大小写字母和特殊字符
2 or STRONG表示满足MEDIUM策略的同时,密码不能存放在字典文件中

网上说的方式,但这不适用于低于5.7.4版本

## 配置文件mysql安装目录下(my.ini)修改,添加下列参数配置
[mysqld]
default_password_lifetime=90

或者

## 命令行(mysql语句)全局修改
SET GLOBAL default_password_lifetime = 90;

本人亲测mysql5.7.33版本,配置了以下设置,虽然有default_password_lifetime变量,但系统default默认值仍为0。如下:全局设定的命令,default_password_lifetimed的值变为了90,系统default默认值仍为0。(用navicat也能配置单个用户的密码有效期)

1、全局设定(可设置,但系统default默认值仍为NULL)

SET GLOBAL default_password_lifetime = 90;

2、让用户使用默认的密码过期全局策略:(用户default_password_lifetime变为NULL)

ALTER USER '用户名'@'localhost' PASSWORD EXPIRE DEFAULT;

3、单个用户设定,为每个具体的用户账户单独设置特定的值(有效),密码过期时间设为30天

ALTER USER '用户名'@'localhost'  PASSWORD EXPIRE INTERVAL 30 DAY;

4、禁用密码过期:(无效)

ALTER USER '用户名'@'localhost'  PASSWORD EXPIRE NEVER;

二、mysql8.0.X版本配置密码过期策略

同上介绍,设置密码过期策略命令如下

1、查看mysql插件命令
show plugins; 
#安装插件(若无validate_password插件,可以安装)
install plugin validate_password soname 'validate_password.dll';

2、查看默认密码策略
show variables like  'validate_password%';

3、全局设定

SET GLOBAL default_password_lifetime = 90;

4、让用户使用默认的密码过期全局策略:

ALTER USER '用户名'@'localhost' PASSWORD EXPIRE DEFAULT;

5、单个用户设定,为每个具体的用户账户单独设置特定的值,密码过期时间设为30天

ALTER USER '用户名'@'localhost'  PASSWORD EXPIRE INTERVAL 30 DAY;

6、禁用密码过期:

ALTER USER '用户名'@'localhost'  PASSWORD EXPIRE NEVER;

对于5.7之后的版本,我们还可以从mysql.user表中查看相关字段

select user,host,password_expired,password_last_changed,password_lifetime from mysql.user;

nacicat查询展示结果如下
nacicat查询展示结果
执行相关语句示例,例如设定某个用户密码过期时间设为45天
展示结果

三、总结

mysqlmysql5.6.X版本目前只有password_expired功能,虽然可以通过安装validate_password插件,配置密码复杂性策略。但其没有password_lifetime功能,要想设置密码的有效时间天数,解决方案是需要升级mysql版本(5.7之后的版本)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐