首页 / Linux / MySQL设置多次登录失败用户重试时间

MySQL设置多次登录失败用户重试时间

摘要:MySQL设置多次登录失败用户重试时间 MySQL 5.7之后提供连接控制插件Connection-Control用来控制客户端在登录连续失败一定次数后的响应延迟,可以防止客户端暴力破解,如果你的数据库架设在公网又开放了公网访问,那还是很有...

MySQL设置多次登录失败用户重试时间

MySQL 5.7之后提供连接控制插件Connection-Control用来控制客户端在登录连续失败一定次数后的响应延迟,可以防止客户端暴力破解,如果你的数据库架设在公网又开放了公网访问,那还是很有必要设置一下,毕竟每天你的服务器都会受到数不胜数来自全球各地hacker的攻击;

该方法是针对每个登录用户名进行失败限制,而不是根据每个IP。

安装插件

登录MySQL命令行,执行以下SQL语句(登录MySQL的root账号,否则没有权限安装插件)安装CONNECTION_CONTROLCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS两个插件;

插件文件的基本名称是 connection_control,文件名后缀因平台而异(例如.so对于 Unix 和类 Unix 系统.dll对于 Windows)我这里是以Linux为例,MySQL版本5.7.25;

INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';

image-20230411224357180

如果要验证是否安装成功,可以执行以下SQL语句;

SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE_VERSION, PLUGIN_LIBRARY FROM INFORMATION_SCHEMA.PLUGINS;

或者直接

SHOW PLUGINS;

image-20230411225206478

连接延迟配置

编辑MySQL配置文件my.cnfmy.ini, 在[mysqld]中加入以下配置,.so根据需要调整平台的后缀;

plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=5
connection_control_min_connection_delay=1000
connection_control_max_connection_delay=15000

image-20230412102017064

修改后重启服务使其生效;

我这里设置的为5次登录操作失败后将会延迟从1秒(min)到15秒(max),每失败一次等待时间将会递增1s,直到该用户名登录成功一次计数器会清零;

为了配置其操作,连接控制插件公开了这些系统变量:

更多相关可以看看官方文档:https://dev.mysql.com/doc/refman/5.7/en/connection-control-installation.html

如果 connection_control_failed_connections_threshold 为非零,则启用失败连接计数并具有以下属性:

  • connection_control_failed_connections_threshold 通过连续失败的连接尝试, 延迟为零 。
  • 此后,服务器会为后续的连续尝试增加增加的延迟,直到成功连接为止。初始未调整的延迟从 1000 毫秒(1 秒)开始,每次尝试增加 1000 毫秒。也就是说,一旦为帐户激活延迟,后续失败尝试的未调整延迟为 1000 毫秒、2000 毫秒、3000 毫秒等。
  • 客户端经历的实际延迟是未经调整的延迟,调整后位于 系统变量connection_control_min_connection_delay 和 系统变量的值范围内connection_control_max_connection_delay ,包括在内。
  • 一旦为帐户激活了延迟,该帐户此后的第一次成功连接也会经历延迟,但后续连接的失败计数会重置。

例如,默认 connection_control_failed_connections_threshold 值为 3,则帐户的前三个连续失败连接尝试没有延迟。第四次和后续失败连接帐户经历的实际调整延迟取决于 connection_control_min_connection_delayconnection_control_max_connection_delay 值:

卸载插件

如果需要卸载插件只需执行以下SQL语句,并还原之前的配置重启服务即可;

UNINSTALL PLUGIN CONNECTION_CONTROL;
UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
版权声明:《MySQL设置多次登录失败用户重试时间》为作者阿凡原创文章,转载请注明原文地址。
最后编辑:2023-4-12
分享到:
发表评论

用心评论~