MySQL设置多次登录失败用户重试时间
摘要:MySQL设置多次登录失败用户重试时间 MySQL 5.7之后提供连接控制插件Connection-Control用来控制客户端在登录连续失败一定次数后的响应延迟,可以防止客户端暴力破解,如果你的数据库架设在公网又开放了公网访问,那还是很有...
MySQL设置多次登录失败用户重试时间
MySQL 5.7之后提供连接控制插件Connection-Control用来控制客户端在登录连续失败一定次数后的响应延迟,可以防止客户端暴力破解,如果你的数据库架设在公网又开放了公网访问,那还是很有必要设置一下,毕竟每天你的服务器都会受到数不胜数来自全球各地hacker的攻击;
该方法是针对每个登录用户名进行失败限制,而不是根据每个IP。
安装插件
登录MySQL命令行,执行以下SQL语句(登录MySQL的root账号,否则没有权限安装插件)安装CONNECTION_CONTROL
和CONNECTION_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';
如果要验证是否安装成功,可以执行以下SQL语句;
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE_VERSION, PLUGIN_LIBRARY FROM INFORMATION_SCHEMA.PLUGINS;
或者直接
SHOW PLUGINS;
连接延迟配置
编辑MySQL配置文件my.cnf
或my.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
修改后重启服务使其生效;
我这里设置的为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
为零。connection_control_min_connection_delay
:超过阈值的连接失败的最小延迟(以毫秒为单位)。connection_control_max_connection_delay
:超过阈值的连接失败的最大延迟(以毫秒为单位)。
如果 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_delay
和 connection_control_max_connection_delay
值:
- 如果
connection_control_min_connection_delay
和connection_control_max_connection_delay
分别为 1000 和 20000,则调整后的延迟与未调整的延迟相同,最大为 20000 毫秒。第四个和后续失败的连接会延迟 1000 毫秒、2000 毫秒、3000 毫秒,依此类推。 - 如果
connection_control_min_connection_delay
和connection_control_max_connection_delay
分别为 1500 和 20000,则第四次及后续失败连接的调整后延迟为 1500 毫秒、2000 毫秒、3000 毫秒等,最大为 20000 毫秒。 - 如果
connection_control_min_connection_delay
和connection_control_max_connection_delay
分别为 2000 和 3000,则第四次及后续失败连接调整后的延迟分别为 2000 毫秒、2000 毫秒和 3000 毫秒,所有后续失败连接也延迟 3000 毫秒。
卸载插件
如果需要卸载插件只需执行以下SQL语句,并还原之前的配置重启服务即可;
UNINSTALL PLUGIN CONNECTION_CONTROL;
UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;