10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 从本手册中摘录

6.4.2.1安装连接控制插件

本节介绍如何安装连接控制插件,CONNECTION_CONTROLCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS.有关安装插件的一般信息,请参阅第5.6.1节,“插件的安装和卸载”

要让服务器使用插件库文件,插件库文件必须位于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,重新启动服务器使新的设置生效。

或者,要在运行时加载插件,请使用这些语句,调整所以必要时为您的平台添加后缀:

安装plugin connection_control soname'connection_control.so';安装插件connection_control_failed_login_attempts soname'connection_control.so';

安装插件立即加载插件,并将其注册到mysql.plugins.系统表使服务器为每个后续正常启动加载它而无需——plugin-load-add

要验证插件安装,请检查Information_schema.plugins.表格或使用显示插件声明(参见第5.6.2节“获取服务器插件信息”。)。例如:

mysql>从Information_schema.plugins中选择plugin_name,plugin_status.plugins,其中plugin_name喜欢'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_CONTROLPlugin公开这些系统变量:

如果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服务器启动或运行时的系统变量。假设您希望在服务器开始延迟其响应之前允许连续4次失败的连接尝试,最小延迟为2000毫秒。要在服务器启动时设置相关变量,请将这些行放在服务器中my.cnf文件:

[mysqld] plugin-load-add = connection_control.so connection_control_failed_connections_threshold = 4 connection_control_min_connection_delay = 2000

要在运行时设置和持续变量,请使用以下语句:

SET PERSIST connection_control_failed_connections_threshold = 4;SET PERSIST connection_control_min_connection_delay = 2000;

设置保存设置运行中的MySQL实例的值。它还保存该值,使其在后续服务器重启时继续使用。要更改正在运行的MySQL实例的值,而不将其转移到后续重启中,请使用全球关键字,而不是坚持.看第13.7.6.1节,“变量赋值的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帐户,但是提供的凭据不正确,或者不匹配任何已知的帐户。

失败连接计数基于每次连接尝试的用户/主机组合。确定适用的用户名和主机名要考虑到代理,其发生方式如下:

  • 如果客户端用户代理其他用户,则连接失败计数的帐户是代理用户,而不是被代理的用户。例如,如果sentelent_user@example.com.代理proxy_user@example.com,连接计数使用代理用户,sentelent_user@example.com.,而不是被代理的用户,proxy_user@example.com.两个都sentelent_user@example.com.proxy_user@example.com中必须有有效的条目mysql.user.系统表和它们之间的代理关系必须在其中定义mysql.proies_priv.系统表(见第6.2.18节,“代理用户”)。

  • 如果客户端用户不代理其他用户,但匹配mysql.user.条目,计数使用当前用户()对应于该条目的值。例如,如果用户User1.从主机连接host1.example.com匹配A.user1@host1.example.com输入,计算使用user1@host1.example.com.如果用户匹配auser1@ % .example.comuser1@ %。com,或user1@ %输入,计数使用user1@ % .example.comuser1@ %。com,或user1@ %, 分别。

对于刚刚描述的情况,连接尝试匹配一些mysql.user.条目,请求是成功还是失败取决于客户端是否提供正确的身份验证凭据。例如,如果客户端提供了不正确的密码,则连接尝试失败。

如果连接尝试匹配不匹配mysql.user.进入,尝试失败。在这种情况下,没有当前用户()值可用,连接失败计数使用客户端和由服务器确定的客户端主机提供的用户名。例如,如果一个客户端试图以用户身份连接user2.来自主人host2.example.com,用户名部分在客户端请求中可用,服务器确定主机信息。用于计数的用户/主机组合为user2@host2.example.com

笔记

服务器维护有关哪些客户端主机可能连接到服务器的信息(基本上是主机值的结合mysql.user.条目)。如果客户端试图从任何其他主机连接,服务器会在连接建立的早期阶段拒绝这个尝试:

错误1130(hy000):host'主机名’不允许连接到这个MySQL服务器

因为这种类型的拒绝发生了这么早,CONNECTION_CONTROL看不见,也不算数。

连接失败监控

要监视失败的连接,请使用以下信息源:

分配价值connection_control_failed_connections_threshold在运行时有这些效果: