作者: | 来源:互联网 | 2023-09-08 05:13
概述今天主要分享一个关于mysql密码策略限制的方案账户设置过期。
一、需求具体需求如下:
root及应用系统账号设置永不过期账户设置过期,运维人员账号设置过期时间为180天
二、相关原理从MySQL 5.7.4版开始,用户的密码过期时间这个特性做了改进,可以通过一个全局变量default_password_lifetime来设置密码过期的策略,此全局变量可以设置一个全局的自动密码过期策略账户设置过期。 常用如下:
1、全局策略:90天过期
可以在MySQL的配置文件中设置一个默认值,这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间账户设置过期。my.cnf配置如下:
[mysqld]default_password_lifetime=902、全局策略:永不过期
如果要设置密码永不过期的全局策略账户设置过期,可以设置
[mysqld]default_password_lifetime=03、用户特定策略:30天过期(覆盖全局)
还可以使用ALTER USER命令为每个具体的用户账户单独设置特定的值,它会自动覆盖密码过期的全局策略账户设置过期。要注意ALTER USER语句的INTERVAL的单位是“天”。
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;4、用户特定策略:禁用密码过期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;5、用户特定策略:使用默认的密码过期全局策略
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;
三、实现方案1、禁用全局策略
在my.cnf设置:
[mysqld]default_password_lifetime=02、设置root用户及应用权限账户永不过期
SELECT USER, HOST, account_locked, password_expired, password_lifetime, concat( 'alter user ', USER, '@''',host, ''' PASSWORD EXPIRE NEVER;' ) 'root_policy' FROM mysql.USER WHERE account_locked = 'N';
3、设置运维账号180天后过期
SELECT USER, HOST, account_locked, password_expired, password_lifetime, concat( 'alter user ', USER, '@''', HOST, ''' PASSWORD EXPIRE INTERVAL 180 DAY;' ) 'ops_policy' FROM mysql.USER WHERE account_locked = 'N' and user not in('root','dbmt');
4、测试重启后是否生效
重启数据库后检查,符合需求账户设置过期。
SELECT USER, HOST, account_locked, password_expired, password_lifetimeFROM mysql.USER WHERE account_locked = 'N';
后面会分享更多devops和DBA方面内容账户设置过期,感兴趣的朋友可以关注下!