大家有没有发现,现在我们用的手机,网站只要需要登录或者认证的,都有这样一项功能,密码或口令输错几次后系统锁定N分钟,并提示N分钟过后重试,有时候会很头疼,万一忘记了密码,只能填一堆信息重新获取,当然这也是对安全的考虑,其实在等保测评中,也有类似的要求,今天我们来学习一下MySQL是如何设置登录多次失败锁定的。

Tips:示例是以 Mysql 5.7 为例

需求

Mysql 数据库密码数据 3 次,自动锁定15分钟。

查看配置

首先使用下面命令查看参数是否设置

1
show variables like '%connection_control%';

如果看到Empty set (0.01 sec) 的字样,说明没有设置该参数;
再查看是否安装 CONNECTION_CONTROL 和 CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 插件。

  • CONNECTION_CONTROL:用来控制登录失败的次数及延迟响应时间。
  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:该表将登录失败的操作记录至IS库中。
1
show plugins;

图一
如果插件列表中没有【图一】中的勾出的两项,需要安装插件;

安装插件

1
2
install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';

执行完之后,再次查看插件列表,会出现【图一】中勾出的两项;现在再次查看connection_control的参数:

1
show variables like '%connection_control%';

图二
可以看到已有的默认配置:

  • connection_control_failed_connections_threshold:失败尝试的次数,默认为3,表示当连接失败3次后启用连接控制,0表示不开启。
  • connection_control_max_connection_delay:响应延迟的最大时间,默认约25天
  • connection_control_min_connection_delay:响应延迟的最小时间,默认1000微秒,1秒

配置

方式一:修改配置文件 my.cnf

1
2
3
4
vim /etc/my.cnf
# 添加下面两项
connection-control-failed-connections-threshold=3 #登陆失败次数限制
connection-control-min-connection-delay=900000 #限制重试时间,此处为毫秒,注意按需求换算

重启 MySQL 服务service mysqld restartservice mysql restart

方式二:设置全局变量

1
2
SET GLOBAL connection_control_failed_connections_threshold = 3;
SET GLOBAL connection_control_min_connection_delay = 900000;

配置完成,再次使用show variables like '%connection_control%';查看参数:
图三
可以看到已经是我们配置的值了。

验证

图四
如【图四】输错三次密码之后,第四次程序已经锁住了。

参考和相关链接

MySQL数据库限制多次登录失败重试时间:https://blog.csdn.net/ywd1992/article/details/83865537

MySQL 插件之连接控制插件:https://www.cnblogs.com/zhenxing/p/11050823.html

更多文章请关注微信公众号: 治恒说说

如果文章对你有用,转发分享、赞赏才是真爱 [斜眼笑]