MySQL8 密码安全策略配置

一、 密码策略配置

1. 空闲连接超时时间,分钟

interactive_timeout=60
wait_timeout=60;

2. 密码过期策略,天

default_password_lifetime=90

3. 密码重用策略

# 60天内不能修改成过去使用过的前6次密码
password_reuse_interval=60
password_history=6

4. 密码验证策略

# 修改密码时验证旧密码
password_require_current=ON

5. 设置密码强度

# 需要安装validate_password组件
# install component 'file://component_validate_password';

# 查看密码相关的配置
show variables like '%validate_password%';

validate_password.check_user_name=ON
validate_password.policy=MEDIUM
# 密码长度
validate_password.length=8
# 必须包含1个大写和1个小写
validate_password.mixed_case_count=1
# 必须包含1个数字
validate_password.number_count=1
# 必须包含1个特殊字符
validate_password.special_char_count=1

6. 登录失败锁定策略

# 需要安装connection_control插件
# install plugin connection_control soname 'connection_control';
# install plugin connection_control_failed_login_attempts soname 'connection_control';

# 查看登录失败锁定策略
show variables like '%connection_control%';
# 连续3次登录失败
connection_control_failed_connections_threshold=3
# 锁账号30分钟
connection_control_min_connection_delay=1800000

二、可能碰到的问题

1. too many connection

  • 分析
SQL> show FULL PROCESSLIST
    Id	User		Host				db	Command	Time	State
611296	governance	192.168.x.x:63862		Connect	 671	Waiting in connection_control plugin	
611360	governance	192.168.x.x:64170		Connect	 530	Waiting in connection_control plugin	
611440	governance	192.168.x.x:62612		Connect	 134	Waiting in connection_control plugin	
611361	governance	192.168.x.x:64174		Connect	 524	Waiting in connection_control plugin	

-- 因为增加了密码策略后,原先程序中的密码不符合密码策略,或者密码过期等原因,
-- 导致未调整密码的程序不停的尝试连接数据库,导致数据库连接耗尽
  • 解决方法
--- 修改密码使其符合复杂度要求
SQL> alter user 'governance'@'%' identified by '密码';

--- 使某用户的密码永不过期
SQL> alter user 'governance'@'%' password expire never;
--- 注意:调整对应程序的密码

--- 拼装kill,用于杀死wating的进程
SQL> select concat('kill ', id, ';') from information_schema.PROCESSLIST where user='governance';
...
concat('kill ', id, ';')
kill 924;
kill 942;
kill 945;
kill 931;
...

-- 复制kill命令,并运行
SQL> kill 924

版权声明:本文为blvyoucan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。