MySQL连接控制插件介绍


Posted in MySQL onSeptember 25, 2021

1.连接控制(connection_control)插件介绍

MySQL 服务端包含一个插件库,可以自定义安装各类插件。connection_control 插件也是其中一种,主要用来控制客户端在登录操作连续失败一定次数后的响应的延迟。该插件可有效的防止客户端暴力登录的风险。该插件包含以下两个组件:

  • CONNECTION_CONTROL:用来控制登录失败的次数及延迟响应时间。
  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:将登录失败的操作记录至 information_schema系统库中。

连接控制插件文件的基本名称为 connection_control 。每个平台的文件名后缀有所不同(对于 Unix 和类 Unix 系统为 .so ,对于 Windows .dll )。下面以 Linux 系统为例来安装下 connection_control 插件,Windows 系统只需要将 .so 改成 .dll 即可。

1.1 动态安装 connection_control 插件

mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
Query OK, 0 rows affected (0.04 sec)

mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
Query OK, 0 rows affected (0.01 sec)

1.2  验证插件状态

mysql> SELECT
    -> PLUGIN_NAME,PLUGIN_STATUS 
    -> FROM
    -> INFORMATION_SCHEMA.PLUGINS 
    -> WHERE
    -> PLUGIN_NAME LIKE 'connection%';
+------------------------------------------+---------------+
| PLUGIN_NAME                              | PLUGIN_STATUS |
+------------------------------------------+---------------+
| CONNECTION_CONTROL                       | ACTIVE        |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE        |
+------------------------------------------+---------------+

1.3 安装完成后 可以看到相关系统变量

mysql> show variables like 'connection_control%';
+-------------------------------------------------+------------+
| Variable_name                                   | Value      |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 3          |
| connection_control_max_connection_delay         | 2147483647 |
| connection_control_min_connection_delay         | 1000       |
+-------------------------------------------------+------------+

可以看出,插件安装还是很简单的,不过这个插件具体有什么作用呢?我们先来解释下相关系统变量:

  • connection_control_failed_connections_threshold:允许帐户进行的连续失败尝试的次数。默认为 3 ,表示当连接失败 3 次后启用连接控制,0 表示不开启。
  • connection_control_max_connection_delay:超出阈值的连接失败的最大延迟(以毫秒为单位),默认 2147483647 毫秒,约 25 天。
  • connection_control_min_connection_delay:超过阈值的连接失败的最小延迟(以毫秒为单位),默认 1000 毫秒,即 1 秒。

至此,你可能明白了 connection_control 插件的作用,那就是当客户端连接数据库连续失败到达一定次数后,服务端会进行一段时间的响应延迟,连续失败尝试的次数越多,响应延迟时间越长。

2.连接控制实验

我们来具体做下实验,为了实验效果,这里将失败次数阈值设为 10 ,延迟最小时间设为 1 分钟,即当连续连接失败十次后,延迟响应时间最低为 1 分钟,下面我们故意输错密码来试试看:

2.1 初始状态

mysql> show variables like 'connection_control%';
+-------------------------------------------------+------------+
| Variable_name                                   | Value      |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 10         |
| connection_control_max_connection_delay         | 2147483647 |
| connection_control_min_connection_delay         | 60000      |
+-------------------------------------------------+------------+
3 rows in set (0.01 sec)
mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
Empty set (0.00 sec)

2.2  故意输错密码

[root@localhost ~]# mysql -utestuser -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'testuser'@'localhost' (using password: YES)

2.3  查看失败记录

mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+----------------+-----------------+
| USERHOST       | FAILED_ATTEMPTS |
+----------------+-----------------+
| 'testuser'@'%' |               1 |
+----------------+-----------------+
1 row in set (0.00 sec)

# 当连续失败次数超过阈值后 再次进行连接会产生延迟 即延迟一定时间后才会返回密码是否正确
mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+----------------+-----------------+
| USERHOST       | FAILED_ATTEMPTS |
+----------------+-----------------+
| 'testuser'@'%' |              10 |
+----------------+-----------------+
mysql> show processlist;
+---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+
| Id      | User     | Host               | db                 | Command | Time  | State                                | Info             |
+---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+
| 1817003 | root     | localhost          | NULL               | Query   |     0 | starting                             | show processlist |
| 1817091 | testuser | localhost          | NULL               | Connect |    16 | Waiting in connection_control plugin | NULL             |
+---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+

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

于是乎,你应该理解了为什么此插件能防止客户端暴力破解,假设暴力破解每分钟尝试 120 次,现在启用该插件后,连续失败一定次数后就会响应延迟,并且随着失败次数的增加延迟时间也会增加,原来能立即开始下次破解,现在只能到延迟时间后才能发起下次尝试,所以能极大降低被暴力破解的风险。

不过启用连接控制插件后要注意是否存在延迟的连接,因为正在延迟的连接也是占用连接数的,可能会引起连接积压导致连接数不够用。所以当出现延迟的连接时,应尽快排查到底是那里在连接,确保密码输入正确。

若要启用此插件,注意要配置合适的阈值及延迟时间,并记得将这些参数写入配置文件。一般等保评测可能会有这项要求,这个时候连接控制插件会用得上。

到此这篇关于MySQL连接控制插件介绍的文章就介绍到这了,更多相关MySQL连接控制插件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
MySQL 自定义变量的概念及特点
May 13 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySQL提取JSON字段数据实现查询
Apr 22 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
MySQL修改默认引擎和字符集详情
Sep 25 #MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 #MySQL
一次MySQL启动导致的事故实战记录
Sep 15 #MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 #MySQL
MySQL 如何限制一张表的记录数
Sep 14 #MySQL
You might like
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
职业生涯规划书的格式
2013/12/29 职场文书
小学教师国培感言
2014/02/08 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
公司委托书范本
2014/04/04 职场文书
啤酒节策划方案
2014/05/28 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
红色故事汇观后感
2015/06/18 职场文书