在互联网时代,数据库安全是重中之重。MySQL 作为流行的开源数据库之一,无疑成为了黑客们重点攻击的目标。其中,
暴力破解(Brute-force Attack) 是一种非常常见且难以完全杜绝的攻击方式。攻击者通过自动化工具,以极高的频率尝试各种用户名和密码组合,直到成功登录为止。
为了有效应对这种威胁,从
MySQL 5.7.17 版本开始,官方提供了一个内置的功能插件——
Connection Control。它就像一位恪尽职守的保安,能够自动识别并暂时“拉黑”那些行为可疑的连续登录失败者。
一、Connection Control 是什么?
Connection Control 插件是一组可灵活配置的扩展,其核心功能是:
在客户端连续多次登录失败后,强制延迟服务器的响应。
它主要包括两个插件:
-
CONNECTION_CONTROL:核心插件,提供连接控制功能。
-
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:提供一个名为
FAILED_LOGIN_ATTEMPTS 的数据字典表,用于记录每个账户的失败登录次数。
它的工作原理非常简单:
二、主要功能与参数详解
Connection Control 的行为通过一系列系统变量进行控制,您可以根据安全需求的严格程度来灵活调整。
核心系统变量:
-
connection_control_failed_connections_threshold
-
含义:触发连接响应延迟的
连续失败登录尝试次数阈值。
-
默认值:
3(表示连续3次失败后,第4次失败登录开始就会触发延迟)。
-
建议:可以根据情况调整为 5 或 10,设置过低可能影响正常用户的偶尔输错。
-
connection_control_min_connection_delay
-
connection_control_max_connection_delay
-
含义:
最大延迟时间(毫秒)。这是为了避免延迟时间无限增长,导致连接池被完全占满。
-
默认值:
2147483647(约 24.8 天,实际上相当于无限大)。
-
建议:
生产环境中强烈建议设置此值,例如设为
60000(1分钟),以免过多的超时连接耗尽数据库资源。
状态变量:
三、如何安装与配置?
Connection Control 是内置插件,无需下载,只需通过 SQL 命令加载即可。
1. 安装插件(MySQL 命令行中执行)
-- 安装核心功能插件INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';-- 安装用于记录失败尝试的辅助插件INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
注意:在 Windows 系统上,插件的文件扩展名为
.dll。
2. 验证插件状态
SELECT PLUGIN_NAME, PLUGIN_STATUSFROM INFORMATION_SCHEMA.PLUGINSWHERE PLUGIN_NAME LIKE 'connection%';
如果输出中
PLUGIN_STATUS 为
ACTIVE,则表示安装成功。
3. 配置参数(my.cnf 或 my.ini)
为了生效,建议将配置写入 MySQL 的配置文件。
[mysqld]# 加载插件plugin-load-add = connection_control.so# 可选:设置失败阈值(3次)connection_control_failed_connections_threshold = 3# 设置最小延迟(1000毫秒 = 1秒)connection_control_min_connection_delay = 1000# !!!重要:设置最大延迟(60000毫秒 = 1分钟)connection_control_max_connection_delay = 60000
修改配置文件后,需要重启 MySQL 服务使其生效。或者,您也可以动态地设置这些变量(重启后失效):
SET GLOBAL connection_control_failed_connections_threshold = 3;SET GLOBAL connection_control_min_connection_delay = 1000;SET GLOBAL connection_control_max_connection_delay = 60000;https://zq.zhaopin.com/moment/73399170
https://zq-mobile.zhaopin.com/moment/73399170
https://zhiq.zhaopin.com/moment/73399170
https://zq.zhaopin.com/moment/73399162
https://zq-mobile.zhaopin.com/moment/73399162
https://zhiq.zhaopin.com/moment/73399162
https://zq.zhaopin.com/moment/73399158
https://zq-mobile.zhaopin.com/moment/73399158
https://zhiq.zhaopin.com/moment/73399158
https://zq.zhaopin.com/moment/73399132
https://zq-mobile.zhaopin.com/moment/73399132
https://zhiq.zhaopin.com/moment/73399132
https://zq.zhaopin.com/moment/73399121
https://zq-mobile.zhaopin.com/moment/73399121
https://zhiq.zhaopin.com/moment/73399121
https://zq.zhaopin.com/moment/73399100
https://zq-mobile.zhaopin.com/moment/73399100
https://zhiq.zhaopin.com/moment/73399100
https://zq.zhaopin.com/moment/73399094
https://zq-mobile.zhaopin.com/moment/73399094
四、效果验证与监控
安装配置完成后,我们可以进行测试。
1. 模拟暴力破解
使用错误密码连续尝试登录某个账户(例如,用
mysql -u... -p 或脚本工具),超过阈值(如3次)后,你会发现下一次错误登录的响应速度明显变慢,这正是插件在起作用。
2. 查询失败记录
安装的第二个插件提供了一个数据字典表,可以查看详细的失败记录:
SELECT * FROM INFORMATION_SCHEMA.FAILED_LOGIN_ATTEMPTS;
输出示例:
+--------------------+-----------------+
| USERHOST | FAILED_ATTEMPTS |
+--------------------+-----------------+
| 'user'@'localhost' | 5 |
| 'root'@'127.0.0.1' | 10 |
+--------------------+-----------------+
这张表清晰地显示了哪些账户来自哪些主机,经历了多少次失败的登录尝试,是排查安全威胁的宝贵信息。
3. 监控延迟触发情况
SHOW GLOBAL STATUS LIKE 'Connection_control_delay_generated';
这个值的增长意味着插件的防御机制正在被触发。
五、注意事项与局限性
-
不影响正确密码的登录:一旦用户使用正确的密码登录,该账户对应的失败计数器会被重置,延迟也会立即解除。
-
基于“用户+主机”的计数:
user@hostA 和
user@hostB 的失败次数是分开计算的。这精准地定位了攻击来源。
-
资源消耗:在遭受大规模暴力破解时,大量延迟的连接可能会占用 MySQL 的连接线程资源。因此,
务必设置
connection_control_max_connection_delay,并配合
max_connections 等参数,防止服务被拖垮。
-
并非银弹:Connection Control 能有效拖慢自动化攻击脚本,但无法防御已经窃取到正确凭证的攻击。它必须作为
深度防御策略的一部分,与使用强密码、禁用默认账户、修改默认端口、配置防火墙白名单等措施结合使用。
总结
MySQL 的 Connection Control 插件是一个轻量级、高效且易于配置的内置安全工具。它通过引入递增的响应延迟,巧妙地化解了暴力破解攻击的冲击力,为管理员发现和应对安全威胁赢得了宝贵时间。对于任何暴露在网络中的 MySQL 实例,启用并合理配置 Connection Control 都是一项必不可少的安全加固措施。