MySQL连接控制插件介绍

目录
  • 1.连接控制(connection_control)插件介绍
    • 1.1 动态安装 connection_control 插件
    • 1.2  验证插件状态
    • 1.3 安装完成后 可以看到相关系统变量
  • 2.连接控制实验
    • 2.1 初始状态
    • 2.2  故意输错密码
    • 2.3  查看失败记录

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连接控制插件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • zabbix通过percona插件监控mysql的方法

    1.安装PHP脚本运行环境 yum install -y php php-mysql 2.加载官方percona模板 [root@cat /]# wget https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm [root@cat /]# rpm -ivh percona-zabbix-templates-1.1.6-1.noarc

  • MySQL查询重写插件的使用

    查询重写插件 从MySQL 5.7.6开始,MySQL Server支持查询重写插件,可以在服务器执行之前检查并可能修改服务器接收的语句. 以下是官方文档介绍: 预解析重写插件具有以下特点: 1.该插件允许在服务器处理之前重写到达服务器的SQL语句. 2.该插件接收一个语句字符串,并可能返回一个不同的字符串. 后解析查询重写插件具有以下特征: 1.该插件支持基于解析树的语句重写. 2.服务器解析每个语句并将其解析树传递给插件,插件可以遍历树.插件可以将原始树返回到服务器以进行进一步处理,或者构造

  • 详解MySQL下InnoDB引擎中的Memcached插件

    前些年,HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,总算是在MySQL中延续了NoSQL的香火,以前单独架设Memcached服务器不仅浪费了内存,而且还必须自己维护数据的不一致问题,有了Memcached插件,这些问题都不存在了,而且借助MySQL本身的复制功能,我们可以说是变相的实现了Memca

  • 发款php蜘蛛统计插件只要有mysql就可用

    于是昨天便认真的做了一下,功能多一点,可以对各种搜索引擎统计分析.可以在多个时间段进行查看.其实代码很简单,为了更简洁些,代码压缩到6k.分为6个文件 1.安装程序 spilder_install.php 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo

  • MySQL HandlerSocket插件安装配置教程

    一.HandlerSocket是什么?HandlerSocket是akira higuchi写的一个MySQL的插件.以MySQL Daemon Plugin的形式提供类似NoSQL的网络服务,通过这个插件,你可以直接跟MySQL后端的存储引擎做key-value式的交互,省去了MySQL上层的SQL解释.打开关闭表.创建查询计划等CPU开销. 目前使用MySQL的网站,多半同时使用Memcache作为键值缓存.虽然这样的架构极其流行,有众多成功的案例,但过于依赖Memcache,无形中让Mem

  • MySql5.6使用validate password 插件加强密码强度的安装及使用方法

    mysql 5.6对密码的强度进行了加强,推出了 validate_password 插件.支持密码的强度要求. 安装办法: 在配置文件中打开 [mysqld] plugin-load=validate_password.so validate-password=FORCE_PLUS_PERMANENT validate_password_policy=2 并装载plugin: mysql>>INSTALL PLUGIN validate_password SONAME 'validate_p

  • MySQL中InnoDB的Memcached插件的使用教程

    安装 为了让文章更具完整性,我们选择从源代码安装MySQL,需要注意的是早期的版本有内存泄漏,所以推荐安装最新的稳定版,截至本文发稿时为止,最新的稳定版是5.6.13,我们就以此为例来说明,过程很简单,只要激活了WITH_INNODB_MEMCACHED即可: shell> groupadd mysql shell> useradd -r -g mysql mysql shell> tar zxvf mysql-5.6.13.tar.gz shell> cd mysql-5.6.1

  • MySQL 密码增强插件

    介绍 以前没有太注意MySQL密码安全策略的配置方法,只是人为了将密码设为复杂密码,但是没有找到配置的方法,今天姜承尧的微信公众号正好发布了一篇关于这个的文章,所以在这里也顺便将方法写下来.首先该功能是在5.5以后的mysql版本才引入的插件,默认源码安装和二进制安装都没有启用该功能,如果没有开启该功能设置简单密码mysql只是会给予提示但还是会允许通过. 启用功能 在my.cnf文件中加入 plugin-load=validate_password.so validate-password=F

  • Spring mvc整合mybatis(crud+分页插件)操作mysql

    一.web.xml配置 我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了. web.xml 配置 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/c

  • MySQL连接控制插件介绍

    目录 1.连接控制(connection_control)插件介绍 1.1 动态安装 connection_control 插件 1.2  验证插件状态 1.3 安装完成后 可以看到相关系统变量 2.连接控制实验 2.1 初始状态 2.2  故意输错密码 2.3  查看失败记录 1.连接控制(connection_control)插件介绍 MySQL 服务端包含一个插件库,可以自定义安装各类插件.connection_control 插件也是其中一种,主要用来控制客户端在登录操作连续失败一定次数

  • Java中如何获取mysql连接的3种方法总结

    前言 本文主要来说说三种 Java 中获取 mysql 连接的方式,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 第一种:传统的连接方式: 第二种:读取配置文件方式: 第三种:数据库连接池. 一.传统的连接方式: 首先在 src 目录下创建名为 lib 的文件夹,导入数据库驱动的 jar 包,随后 "add to build path". 1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); 2.获取连接 S

  • MySQL 权限控制细节分析

    今天周天,早上懒了一会儿,起的有点儿晚,中午没事儿干,重新看了看MySQL里面的权限控制模块,再次回头看,还是有很多收获的细节,这里记录一下,方便自己后续查看.     关于权限部分的内容,之前3月11号的文章中有写过一些,今天的内容,我们使用一个一个的细节知识点来撰写(本文中所使用的MySQL版本是5.7.16),在写这些知识点之前,我们首先介绍一下MySQL的权限控制粒度.然后了解一下MySQL中客户端发起请求的时候,服务端所做的核实工作,先来看权限控制粒度: 1.全局层级 全局权限使用于给

  • 用于App服务端的MySQL连接池(支持高并发)

    本文向大家介绍了简单的MySQL连接池,用于App服务端比较合适,分享给大家供大家参考,具体内容如下 /** * 连接池类 */ package com.junones.test; import java.sql.Connection; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.mysql.jdbc.jdb

  • 经典mysql连接查询例题

    MySQL连接查询相信大家都有所了解,连接查询是在数据库查询操作的时候经常用到的,下面就为您介绍MySQL连接查询 mysql连接查询:支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表:主队,客队,比赛成绩,比赛时间 方法一:子查询和连接查询混合   step1: 复制代码 代码如下: select result.id, t_name as h_name,match_time,resul

  • C++与mysql连接遇到的问题汇总

    最近接触了很多数据库的东西,本来是一直接触的是sql server,不过由于项目需要就开始对mysql进行了连接.下面就让我这个菜鸟浅谈下经验吧. 对于C++连接mysql,我不太喜欢多下载一个软件mysqlodbc,所以采用的是通过mysql自己的API函数进行连接: 1.使用API的方式连接,需要加载mysql的头文件和lib文件. 在VS2010的附加包含目录中添加\MySQL\MySQL Server 5.1\include.在安装MySql的目录下找. 把libmysql.dll和li

  • MySql的优化步骤介绍(推荐)

    MySql优化的一般步骤: 1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以"Com"开头的指令 show session status like 'Com%':显示当前的连接的统计结果 show global status like 'Com%' :显示自数据库上次启动至今的统计结果 注:默认是session级别的 其中Com_XXX表示XXX语句所执行的次数. 重点注意:Com_sele

  • Python3实现mysql连接和数据框的形成(实例代码)

    Python3实现mysql连接和数据框的形成,具体代码如下所示: # -*- coding:utf-8 -*- # __author__ = "LQ" import pymysql import pandas as pd import numpy as np from sklearn import preprocessing #返回数据库连接 def dbcconnect(): conn = pymysql.connect(host='ip', port=3306, user='us

  • workerman写mysql连接池的实例代码

    首先要了解为什么用连接池,连接池能为你解决什么问题 连接池主要的作用: 1.减少与数据服务器建立TCP连接三次握手及连接关闭四次挥手的开销,从而降低客户端和mysql服务端的负载,缩短请求响应时间 2.减少数据库的并发连接数,即解决应用服务器过多导致的数据库 too many connections 问题 如果是为了解决问题1 则在workerman中数据库连接池不是最高效的方法,反而是自找麻烦的做法.由于PHP是单进程单线程的,使用PHP实现数据库连接池,肯定需要用单独的进程去做,那么就会涉及

随机推荐