重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 153|回复: 0
打印 上一主题 下一主题

[命令及语法] MySQL数据库下connection_control和Waiting in connection_control plugin插件

[复制链接]
跳转到指定楼层
楼主
发表于 2025-6-26 08:47:09 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
介绍:
connection_control 插件,主要用来控制客户端在登录操作连续失败一定次数后的响应的延迟。那就是当客户端连接数据库连续失败到达一定次数后,服务端会进行一段时间的响应延迟,连续失败尝试的次数越多,响应延迟时间越长。
该插件可有效的防止客户端暴力登录的风险。该插件包含以下两个组件:
CONNECTION_CONTROL:用来控制登录失败的次数及延迟响应时间。
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:将登录失败的操作记录至 information_schema系统库中。



配置:
[mysqld]
plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=5
connection_control_max_connection_delay=2147483647
connection_control_min_connection_delay=1500


配置说明:
plugin-load-add=connection_control.so#插件预加载
connection-control=FORCE_PLUS_PERMANENT#强制打开插件
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT#强制打开插件


以下3个参数均可以利用 set global 的方式在线修改
connection_control_failed_connections_threshold=5#允许帐户进行的连续失败尝试的次数。默认为3,表示当连接失败3次后启用连接控制,
0表示不开启
connection_control_max_connection_delay=2147483647##超出阈值的连接失败的最大延迟(以毫秒为单位),默认 2147483647 毫秒,约25天
connection_control_min_connection_delay=1500#超过阈值的连接失败的最小延迟(以毫秒为单位),默认 1000 毫秒,即 1 秒


show plugins;
show variables like "connection_control%";


查看失败记录
SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
正常情况下,输错密码是即刻返回错误的,当连续失败次数达到阈值后,再次进行连接尝试,则会延迟响应,具体表现就是一直卡着,到延迟结束后才返回错误。information_schema 系统库中的表会记录登录失败的用户名及失败次数,当延迟发生时,从 processlist 中也可以查到正在延迟的
连接。若输入密码正确,则会取消延迟、重新计数。


尝试3次错误输入密码后,在第4次登录时会delay 1秒(由connection_control_min_connection_delay指定),同时Connection_control_delay_generated计数+1(若登录密码继续输入错误,则delay秒数与计数器继续增加。直到成功登录为止之后,此时
delay清零,但计数器不清零。需要注意的是,即使后续密码正确,依然要先延迟一定的秒数,才会进入账号校验流程)


这里注意的是delay的值并不是说每次都是1500毫秒,而是以(当前失败总次数-失败阈值)*1500,所以假如当前设定为上,当我失败登陆第6次时,我的等待时间不是1.5秒而是3秒,还有就是想不让尝试登陆超过一次,可以把阈值改为0。



二、问题解决
1、问题描述
使用命令连接mysql发现非常卡,要十几秒才能连上
连上使用show processlist;查看
发现状态为Waiting in connection_control plugin
2、原因
链接异常(用户名密码错误)导致connectioncontrol 插件进行拦截,拦截用户身份验证处于 “waiting in connection_control plugin”的链接延迟状态


3、解决
1、使用kill杀掉连接的id,应用会一直连接,这种方法不行
select ID from information_schema.PROCESSLIST where Command='Connect' and STATE='Waiting in connection_control plugin';


2、排查应用连接的账号密码,更改正确,然后重启数据库,重启应用
重启服务,重启服务后会刷新CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS表下账号的对应失败登录错误次数


3、修改上述的表内容,前提是你有其他对应权限的账号登录进行


4、将插件取消使用,不建议

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2025-7-15 22:55 , Processed in 0.106699 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表