当前位置: 首页 > 科技观察

说说MySQL连接控制插件

时间:2023-03-19 11:43:07 科技观察

前言:当连接数据库失败次数过多时,MySQL会限制登录吗?数据库服务器应该如何应对暴力破解?本文介绍的是MySQL中的连接控制插件,一起来了解一下这个插件的作用吧。一、连接控制(connection_control)插件介绍MySQL服务器包含一个插件库,可以自定义安装各种插件。connection_control插件也是其中之一,主要用于控制登录操作连续失败一定次数后客户端响应的延迟。本插件可有效防范客户端暴力登录的风险。该插件包括以下两个组件:CONNECTION_CONTROL:用于控制登录失败次数和延迟响应时间。CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:将失败的操作登录到information_schema系统库。连接控制插件文件的基本名称是connection_control。每个平台的文件名后缀不同(.so用于Unix和类Unix系统,.dll用于Windows)。下面以Linux系统为例,安装connection_control插件。Windows系统只需要将.so改为.dll即可。#动态连接_control插件mysql>installpluginconnection_controlsoname'connection_control.so';queryok,0rowsaftected(0.04Sec)mysql>stancialpluginconnnection_control_control_control_control_control_contred_login_login_login_login_atement_atement_atement_temptsement_connection_connection_contrectnection-contrectnection-contrectemnectrectnectionqueryll>>FROM->INFORMATION_SCHEMA.PLUGINS->WHERE->PLUGIN_NAMELIKE'connection%';+------------------------------------------+----------------+|PLUGIN_NAME|PLUGIN_STATUS|+----------------------------------------+------------+|CONNECTION_CONTROL|ACTIVE||CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS|活跃|+----------------------------------------+-------------+#安装完成后可以看到相关的系统变量mysql>showvariableslike'connection_control%';+--------------------------------------------+------------+|变量名|值|+------------------------------------------------+------------+|connection_control_failed_connections_threshold|3||connection_control_max_connecttion_delay|2147483647||connection_control_min_connection_delay|1000|+------------------------------------------------+------------+可以看出插件的安装还是很简单的,但是这个插件的具体功能是什么-在?先解释一下相关系统变量:connection_control_failed_connections_threshold:账户允许的连续失败尝试次数,默认为3次,表示连接失败3次后开启连接控制,0表示不开启。connection_control_max_connection_delay:连接失败超过阈值的最大延迟(毫秒),默认为2147483647毫秒,约25天。connection_control_min_connection_delay:连接失败超过阈值的最小延迟(毫秒),默认为1000毫秒,即1秒。至此,你可能就明白connection_control插件的作用了,就是当客户端连接数据库失败一定次数后,服务端会延迟一段时间响应。连续失败的尝试越多,响应延迟就越长。2.连接控制实验下面我们来详细的做一下实验。为了实验效果,失败阈值设置为10,最小延迟时间设置为1分钟。即连续十次连接失败后,最小延迟响应时间为1分钟。让我们尝试故意输入错误的密码:#Initialstatemysql>showvariableslike'connection_control%';+----------------------------------------------+------------+|Variable_name|Value|+----------------------------------------------+-----------+|connection_control_failed_connections_threshold|10||connection_control_max_connection_delay|2147483647||connection_control_min_connection_delay|60000|+---------------------------------------------+------------+3rowsinset(0.01sec)mysql>SELECT*FROMinformation_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;Emptyset(0.00sec)#Intentionally输入错误的密码[root@localhost~]#mysql-utestuser-p123mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.ERROR1045(28000):Accessdeniedforuser'testuser'@'localhost'(usingpassword:YES)#Viewfailurerecordmysql>SELECT*FROMinformation_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;+----------------+----------------+|用户主机|失败_ATTEMPTS|+----------------+----------------+|'testuser'@'%'|1|+--------------+----------------+1rowinset(0.00sec)#当连续失败次数超过threshold,proceedagain连接会被延迟,即一定时间后会返回密码。mysql>SELECT*FROMinformation_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;+------------+--------------------+|USERHOST|FAILED_ATTEMPTS|+--------------+----------------+|'testuser'@'%'|10|+-------------+----------------+mysql>showprocesslist;+--------+---------+--------------------+-------------------+----------+--------+------------------------------------+----------------+|Id|User|Host|db|命令|时间|状态|信息|+--------+----------+------------------+------------------+--------+--------+---------------------------------+----------------+|1817003|root|localhost|NULL|Query|0|starting|showprocesslist||1817091|testuser|localhost|NULL|Connect|16|Waitinginconnection_controlplugin|NULL|+--------+-----------+------------------+--------------------+-------------+-------+------------------------------------+----------------+一般情况下,如果输入错误的密码,会立即返回错误。当连续失败次数达到阈值后,再次尝试连接,响应会延迟。具体表现为一直卡住。即information_schema系统库中的表会在延迟结束前记录用户名和登录失败次数。当出现延迟时,也可以从进程列表中找到延迟的连接。如果输入的密码正确,则取消延时,重新开始计数。所以,你应该明白为什么这个插件可以防止客户端暴力破解了。假设暴力破解尝试为每分钟120次。现在启用插件后,在连续失败一定次数后会延迟响应,随着失败次数的增加,延迟会延迟。时间也会增加。以前是可以马上开始下一次破解,现在是延迟时间后才能开始下一次尝试,大大降低了被暴力破解的风险。但是启用连接控制插件后,要注意是否有延迟连接,因为延迟连接也会占用连接数,可能会造成连接积压,导致连接数不足。因此,当出现延迟连接时,应尽快检查连接的位置,确保密码输入正确。要启用此插件,请注意配置适当的阈值和延迟时间,并记住将这些参数写入配置文件。一般在等保评价中可能会有这样的需求,这时候就会用到连接控制插件。