10bet网址
MySQL的安全
相关的文档10bet官方网站 下载这个摘录
PDF (Ltr)- 2.3 mb
PDF (A4)- 2.4 mb


6.2.1连接控制插件安装

本节介绍如何安装连接控制插件,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_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系统变量、包容。

  • 一旦为一个帐户激活了延迟,该帐户随后的第一次成功连接也会经历延迟,但后续连接的失败计数将被重置。

例如,使用defaultconnection_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.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_delay2000的价值。相反,设置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.comuser1@ %。com,或user1@ %入口代替,计数使用user1@ % .example.comuser1@ %。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_failed_connections_threshold在运行时有以下影响: