目录
目标密码策略
一、至少一个大写、至少一个小写、至少一个数字、至少一个字符、长度至少9位
1.查看当前配置
2.查看现有插件
3.添加插件
4.密码策略详细配置
5.策略成果测试
二、设置60天密码过期
三、整体变更方案
目标密码策略
目标密码策略:至少一个大写、至少一个小写、至少一个数字、至少一个字符、长度至少9位、60天密码过期。
我的版本号: 5.7.21
一、至少一个大写、至少一个小写、至少一个数字、至少一个字符、长度至少9位
1.查看当前配置
show variables like 'validate_password%';
查了下,我的mysql没密码验证插件
有这个插件的应该是下面这样
直接在my.cnf配置文件中修改了密码策略,系统就默认为我们安装密码插件,不然在刚开始的时候我们的数据库是默认没有安装密码插件的。
安装插件参考这个:mysql 安装插件 validate_password_舰长115的博客-CSDN博客_mysql 安装插件
2.查看现有插件
查看插件的路径 show variables like 'plugin_dir';
有我需要的“validate_password.so”这个插件
3.添加插件
修改my.cnf
#插件库的文件名是validate_password.文件名后缀根据平台的不同而不同(例如,linux是.so 对于Windows是.dll)。
linux添加:
[mysqld]
plugin-load-add=validate_password.so
#服务器在启动时加载插件,并防止在服务器运行时删除插件。
validate-password=FORCE_PLUS_PERMANENT
重启后查询show variables like 'validate_password%' 结果如下图。
安装了密码插件后也可以直接修改了
--可以使用以下命令进行修改
--密码验证策略低要求(0或LOW代表低级)
set global validate_password.policy=MEDIUM;--密码至少要包含的小写字母个数和大写字母个数
set global validate_password.mixed_case_count=1;--密码至少要包含的数字个数。
set global validate_password.number_count=1;--密码至少要包含的特殊字符数
set global validate_password.special_char_count=1;-- 密码长度
set global validate_password.length=8;
4.密码策略详细配置
密码策略变量含义:
validate_password.policy:密码策略,检查用户的密码。
0:(Low)密码长度最少8个字符
1:(Mediumpolicy)至少包含1个数字,1个小写字母,1个大写字母和1个特殊字符组成(默认值)
2:(Strongpolicy)长度为4或更长的密码子字符串不得与字典文件中的单词匹配
validate_password.length:需要密码最小字符数,默认为8
validate_password.number_count:需要密码的最小数字字符数,默认为1
validate_password.mixed_case_count:需要密码的小写和大写的最小字符数,默认为1
validate_password.special_char_count:需要密码的特殊字符的最小字符数,默认为1
validate_password.dictionary_file:用于检查密码的字典文件的路径名,默认没有
下面是我的配置:
1个数字,1个小写字母,1个大写字母和1个特殊字符组成,最少9位。
5.策略成果测试
#alter user 'root'@'%' identified by '123456';
二、设置60天密码过期
select * from mysql.user;
N为不过期,Y为过期。默认为N不过期。
将密码设置为过期的语句为:alter user ‘用户名’@‘host’ password expire; 如:
alter user 'root'@'localhost' password expire;
这时候输入
select * from mysql.user;
查看root的password_expired字段已经变为Y,再重新登录时会发现已经连接不上,提示密码过期。解决办法是修改登录密码就可以。
查看网上的说法,可以修改过期的天数(多少天过期),以天为单位,如:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;
或者修改密码永不过期,如:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
或这种方式修改密码不过期:
SET GLOBAL default_password_lifetime = 0;
我这里执行:
ALTER USER 'root'@'%' PASSWORD EXPIRE INTERVAL 60 DAY;
执行结果:
三、整体变更方案
分享下最后的变更方案
#----------------
目标密码策略
#----------------
至少一个大写、至少一个小写、至少一个数字、至少一个字符、长度至少9位、60天密码过期。
#----------------
修改root密码过期时间,不需重启
#----------------主从分别如下步骤执行:
1.更改过期时间
ALTER USER 'root'@'%' PASSWORD EXPIRE INTERVAL 60 DAY;2.查看执行结果,password_lifetime为60
select * from mysql.user;
#----------------
至少一个大写、至少一个小写、至少一个数字、至少一个字符、长度至少9位,需重启数据库
#----------------
0.
数据库启动顺序
停应用 ->停数据库(先备后主) ->改配置 -> 启数据库(先主后备)-> 启应用
1.
停应用
2.
关闭MySQL从库
a.先查看当前的主从同步状态show slave statusG;看是否双yes
b.执行stop slave
c.停止从库服务mysqladmin shutdown -u用户名 -p密码 (service mysqld stop)
d.查看是否还有mysql的进程ps -ef | grep mysql
d.如果部署了多个实例,那每个实例都要按照以上步骤来操作
3.
关闭MySQL主库
a.停止主库服务mysqladmin shutdown -u用户名 -p密码 (service mysqld stop)
b.查看是否还有mysql的进程ps -ef | grep mysql
4.
编辑配置文件
vim /etc/my.cnf
添加:
[mysqld]
plugin-load-add=validate_password.so
#服务器在启动时加载插件,并防止在服务器运行时删除插件。
validate-password=FORCE_PLUS_PERMANENT
#密码策略
validate_password_policy=1
validate_password_length=9
5.
启动MySQL主库
a.启动主库服务mysqladmin start -u用户名 -p密码 (service mysqld start)
b.查看mysql的进程ps -ef | grep mysql
6.
启动MySQL从库
a.启动从库服务mysqladmin start -u用户名 -p密码 (service mysqld start)
b.启动复制start slave;
c.检查同步状态show slave statusG;是否双yes
d.查看mysql的进程ps -ef | grep mysql
7.
查看插件及策略是否添加成功
service mysqld restart
show variables like 'validate_password%';