本节介绍如何安装连接控制插件,CONNECTION_CONTROL
而且CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
.有关安装插件的一般信息,请参见安装和卸载插件.
为了被服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir
系统变量)。如果有必要,可以通过设置的值来配置插件目录位置plugin_dir
在服务器启动。
插件库文件名为connection_control
.每个平台的文件名后缀不同(例如,所以
对于Unix和类Unix系统,. dll
对于Windows)。
要在服务器启动时加载插件,请使用——plugin-load-add
选项来命名包含它们的库文件。使用这种插件加载方法,必须在每次服务器启动时给出该选项。例如,将这些行放在服务器中my.cnf
文件,调整所以
为您的平台添加必要的后缀:
(mysqld) plugin-load-add = connection_control.so
修改后my.cnf
,重新启动服务器,使新的设置生效。
或者,要在运行时加载插件,可以使用这些语句,调整所以
为您的平台添加必要的后缀:
安装插件CONNECTION_CONTROL .so;安装插件CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
安装插件
立即加载插件,并将其注册到mysql.plugins
系统表,使服务器在以后每次正常启动时都加载它,而不需要——plugin-load-add
.
要验证插件安装,请检查INFORMATION_SCHEMA。插件
表或使用显示插件
声明(见获取服务器插件信息).例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA。PLUGIN_NAME LIKE 'connection%';+------------------------------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +------------------------------------------+---------------+ | 积极CONNECTION_CONTROL | | | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS |活跃 | +------------------------------------------+---------------+
如果一个插件初始化失败,检查服务器错误日志诊断消息。
如果插件之前已经注册安装插件
或者装载着——plugin-load-add
,你可以使用——连接控制
而且——connection-control-failed-login-attempts
服务器启动时控制插件激活的选项。例如,要在启动时加载插件并防止它们在运行时被删除,可以使用以下选项:
(mysqld) plugin-load-add = connection_control.soconnection-control=FORCE_PLUS_PERMANENT connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
如果希望阻止服务器在没有给定连接控制插件的情况下运行,请使用选项值力
或FORCE_PLUS_PERMANENT
如果插件初始化不成功,强制服务器启动失败。
可以只安装一个插件而不安装另一个插件,但两个插件都必须安装才能实现完全的连接控制功能。特别是,只安装CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
插件的用处不大,因为没有CONNECTION_CONTROL
插件来提供填充CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
表,表总是空的。
若要启用配置其操作,则CONNECTION_CONTROL
Plugin公开这些系统变量:
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
系统变量、包容。一旦为一个帐户激活了延迟,该帐户随后的第一次成功连接也会经历延迟,但后续连接的失败计数将被重置。
例如,使用defaultconnection_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毫秒。
您可以设置CONNECTION_CONTROL
服务器启动或运行时的系统变量。假设您希望在服务器开始延迟其响应之前允许连续4次失败的连接尝试,最小延迟为2000毫秒。要在服务器启动时设置相关变量,请将这些行放入服务器中my.cnf
文件:
(mysqld) plugin-load-add = connection_control.soconnection_control_failed_connections_threshold=4 connection_control_min_connection_delay=2000
要在运行时设置和持久化变量,使用以下语句:
SET PERSIST connection_control_failed_connections_threshold = 4;SET persistent connection_control_min_connection_delay = 2000;
设置保存
为正在运行的MySQL实例设置一个值。它还会保存该值,使其保留到后续服务器重新启动时。要更改正在运行的MySQL实例的值,而不将其保留到后续重启时,请使用全球
关键字,而不是坚持
.看到SET变量赋值语法.
的connection_control_min_connection_delay
而且connection_control_max_connection_delay
系统变量的最小值和最大值分别为1000和2147483647。此外,每个变量的允许取值范围也取决于另一个变量的当前值:
因此,要对某些配置进行所需的更改,可能需要以特定的顺序设置变量。假设当前的最小和最大延迟分别为1000和2000,并且希望将它们设置为3000和5000。你不能先设置connection_control_min_connection_delay
到3000,因为这比电流大connection_control_max_connection_delay
2000的价值。相反,设置connection_control_max_connection_delay
设置为5000,然后设置connection_control_min_connection_delay
到3000年。
当CONNECTION_CONTROL
插件安装后,它检查连接尝试并跟踪它们是成功还是失败。因此,失败的连接尝试是客户端用户和主机匹配已知的MySQL帐户,但提供的凭证不正确,或不匹配任何已知的帐户。
失败连接计数基于每次连接尝试的用户/主机组合。确定适用的用户名和主机名时要考虑到代理,方法如下:
如果客户端用户代理另一个用户,则进行失败连接计数的帐户是代理用户,而不是代理用户。例如,如果
external_user@example.com
代理proxy_user@example.com
,连接计数使用代理用户,external_user@example.com
,而不是代理用户,proxy_user@example.com
.这两个external_user@example.com
而且proxy_user@example.com
中必须有有效的条目mysql.user
中的系统表和它们之间的代理关系必须定义mysql.proxies_priv
系统表(见第4.19节“代理用户”).如果客户端用户没有代理其他用户,而是匹配
mysql.user
入口,计数使用CURRENT_USER ()
对应于该条目的值。例如,如果一个用户user1
从主机连接host1.example.com
匹配user1@host1.example.com
输入,计算使用user1@host1.example.com
.如果用户匹配auser1@ % .example.com
,user1@ %。com
,或user1@ %
入口代替,计数使用user1@ % .example.com
,user1@ %。com
,或user1@ %
,分别。
对于刚刚描述的情况,连接尝试与某些情况相匹配mysql.user
条目,请求是否成功取决于客户机是否提供了正确的身份验证凭据。例如,如果客户端提供了错误的密码,连接尝试将失败。
如果连接尝试与no匹配mysql.user
进入,尝试失败。在这种情况下,没有CURRENT_USER ()
值可用,连接失败计数使用客户机提供的用户名和由服务器确定的客户机主机。例如,如果客户端试图以用户身份连接user2
从主机host2.example.com
,用户名部分在客户端请求中可用,服务器确定主机信息。用于计数的用户/主机组合为user2@host2.example.com
.
服务器维护关于哪些客户机主机可能连接到服务器的信息(本质上是用于的主机值的并集)mysql.user
条目)。如果客户端试图从任何其他主机连接,服务器会在连接建立的早期阶段拒绝该尝试:
错误1130 (HY000):主机'host_name“不允许连接到此MySQL服务器。
因为这种排斥反应发生得很早,CONNECTION_CONTROL
看不到它,也不去数它。
要监视失败的连接,请使用以下信息源:
的
Connection_control_delay_generated
状态变量表示服务器对失败的连接尝试增加响应延迟的次数。方法定义的阈值之前发生的尝试不计算在内connection_control_failed_connections_threshold
系统变量。的
INFORMATION_SCHEMA
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
表提供了关于每个帐户(用户/主机组合)当前连续连接失败次数的信息。这将计算所有失败的尝试,而不管它们是否被延迟。
赋值给connection_control_failed_connections_threshold
在运行时有以下影响:
所有累积的失败连接计数器将重置为零。
的
Connection_control_delay_generated
状态变量重置为零。