connection_control插件必须手动安装CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS两个组件并设为ACTIVE,配置connection_control_failed_connections_threshold等变量需写入my.cnf并重启生效,且localhost和SUPER用户默认绕过,仅对远程普通用户起效。

connection_control 插件不是开个开关就能防爆破的,它必须手动安装、配套组件齐备、阈值配置合理,否则 SHOW VARIABLES LIKE 'connection_control%' 里压根看不到变量,所有配置都白搭。
connection_control 和 connection_control_failed_login_attempts 必须一起装
只执行 INSTALL PLUGIN connection_control SONAME 'connection_control.so' 是不够的。MySQL 启动后查不到 connection_control_failed_connections_threshold 变量,说明失败计数逻辑根本没加载。
- 必须按顺序执行两条命令:
INSTALL PLUGIN connection_control SONAME 'connection_control.so',再执行INSTALL PLUGIN connection_control_failed_login_attempts SONAME 'connection_control.so' - 装完检查:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME IN ('connection_control', 'connection_control_failed_login_attempts');,两个状态都得是ACTIVE - 装错顺序或漏一个,
SHOW VARIABLES LIKE 'connection_control%'输出为空,SET GLOBAL connection_control_failed_connections_threshold = 5会报错 Unknown system variable
connection_control_failed_connections_threshold 不写进 my.cnf 就不持久
SET GLOBAL connection_control_failed_connections_threshold = 5 只在当前实例生命周期有效,MySQL 重启后变回默认值 3——而这个默认值太低,容易被误触发(比如网络抖动、应用重试)。
- 必须在
my.cnf的[mysqld]段添加:connection_control_failed_connections_threshold = 5 - 同时建议加:
connection_control_min_connection_delay = 1000(单位毫秒),避免延迟过短形同虚设 - 改完配置要重启 MySQL,
SET GLOBAL不能替代配置文件固化
localhost 和 skip-grant-tables 连接默认被绕过
插件对 'root'@'localhost' 或通过 skip-grant-tables 启动的连接完全不生效。你输错 100 次也不会被限流,但攻击者从远程 IP 登录就会被卡住。
- 验证当前连接是否受控:
SELECT USER(), CURRENT_USER();,如果返回'root'@'localhost',那测试结果不具备代表性 - 生产环境务必用具体远程地址建管理账号,例如:
CREATE USER 'dba'@'192.168.10.50' IDENTIFIED BY 'pwd'; - 别给业务账号
SUPER权限——connection_control对拥有SUPER的用户可能豁免(尤其 MySQL 8.0.19 之前)
auth_delay 插件更适合拖慢暴力尝试节奏
connection_control 是“连上就卡”,靠延迟响应来增加攻击成本;但如果你更需要“输错密码就卡住”,auth_delay 更直接——它只在认证失败后 sleep,正确凭据完全不受影响。
-
auth_delay要求 MySQL ≥ 8.0.27,加载方式:INSTALL PLUGIN auth_delay SONAME 'auth_delay.so'; - 设置延迟:
SET GLOBAL auth_delay_delay = 500;(单位毫秒),最小值是 1,不能设为 0 - 注意:
auth_delay默认只作用于mysql_native_password用户;若你用的是caching_sha2_password,需确认版本兼容性,或改用connection_control配合日志 +fail2ban


















