Mysql数据库管理-plugin安装与配置总结

插件:CONNECTION_CONTROL 和 CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS

说明

包括CONNECTION_CONTROL 和 CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS两个插件;

该插件使管理员能设置当连续连接失败超过指定次数后,服务端根据配置值增加对连接的相应延迟。

使用该插件能缓解MySQL用户的暴力破解;

使用

安装:

该插件默认未启用需要进行安装

首先确认MySQL插件目录,plugin library文件需位于该路径下。在linux系统下plugin library文件名为connection_control.so

mysql> show global variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| plugin_dir    | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
1 row in set (0.01 sec)

mysql> system ls -ltr /usr/local/mysql/lib/plugin/ |grep connection_control.so 
-rwxr-xr-x 1 7161 31415  1342192 Jun 17  2020 connection_control.

 为了在MySQL进程启动时加载插件,需要使用–plugin-load-add选项,如在配置文件中追加

mysql -uroot -p123  --plugin-load-add=connection_control.so

C:\Users\Administrator>mysql -uroot -p123  plugin-load-add=connection_control.so
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES

也可使用以下命令在运行时加载插件。install plugin命令会立即加载插件,并同时注册到系统表 mysql.plugins中。这样服务器后续正常启动时会自动加载,不再需要使用–plugin-load-add选项。

mysql> install plugin connection_control soname 'connection_control.so';
Query OK, 0 rows affected (0.01 sec)

mysql> install plugin connection_control_failed_login_attempts soname 'connection_control.so'; 
Query OK, 0 rows affected (0.00 sec)

​ 验证connection_control插件情况

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        |
+------------------------------------------+---------------+
2 rows in set (0.00 sec)

系统参数和状态变量

  • connection_control_failed_connections_threshold

    连接失败阈值,当连续连接失败超过该阈值是服务端会增加连接响应延迟。为0时禁用连接失败计数,服务端永不会增加延迟。该值为非零值N时,连续连接失败的N+1次尝试将会增加响应延迟。默认为3,取值范围0–2147483647。

  • connection_control_min_connection_delay

    服务端增加响应延迟的最少时间,单位为毫秒。默认值1000,取值范围 1000–2147483647。

  • connection_control_max_connection_delay

    服务端增加响应延迟的最大时间,单位为毫秒。默认值1000,取值范围 1000–2147483647。

  • 状态变量 Connection_control_delay_generated

    服务端增加响应延迟的次数,这是一个全局累计值,当修改connection_control_failed_connections_threshold值后该状态值会重置为零;

    mysql> show status like 'connection_control_delay_generated';
    +------------------------------------+-------+
    | Variable_name                      | Value |
    +------------------------------------+-------+
    | Connection_control_delay_generated | 13    |
    +------------------------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> set global connection_control_failed_connections_threshold=4;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show status like 'connection_control_delay_generated';
    +------------------------------------+-------+
    | Variable_name                      | Value |
    +------------------------------------+-------+
    | Connection_control_delay_generated | 0     |
    +------------------------------------+-------+
    1 row in set (0.00 sec)

    更详细的信息请查询information_schema.connection_control_failed_login_attempts表,表中记录了各用户失败连接的次数,正常连接后记录会被清理;当修改connection_control_failed_connections_threshold值后该表会清空

    mysql> select * from information_schema.connection_control_failed_login_attempts;
    +----------------------+-----------------+
    | USERHOST             | FAILED_ATTEMPTS |
    +----------------------+-----------------+
    | 'test1'@'localhost'  |               1 |
    | 'test'@'%'           |               2 |
    | 'root'@'localhost'   |               2 |
    | 'teste1'@'localhost' |               6 |
    +----------------------+-----------------+
    4 rows in set (0.00 sec)

配置使用

当connection_control_min_connection_delay配置为一个非零值N时,用户连续连接失败小于等于N次,延迟为零; 此后服务端会增加服务响应的延迟,直到连接成功。延迟时间从connection_control_min_connection_delay开始每次失败递增1秒,直到connection_control_max_connection_delay;如connection_control_min_connection_delay 等于 connection_control_max_connection_delay 则每次延迟时间不变。

​ 注意,连续失败后第一次成功的链接依然会有响应延迟,但会重置该用户的失败连接次数;

其他命令

查看连续登录错误次数

 select * from information_schema.connection_control_failed_login_attempts;

其他说明

Waiting in connection control plugin

Connect状态的连接也会占用连接数。此类连接若大量积压,会很快达到max_connections的上限,最终引起too many connections的故障。

show processlist可以看到State为Waiting in connection control plugin的就是被该插件给控制住的链接

大量的unauthernticated user

不管连结的的方式是经过hosts或是IP的模式,
他都会对DNS做反查。mysql会尝试去反查IP->DNS,由于反查解析过慢,无法应付快速多量的查询。

这个主要是因为DNS不稳定导致的。
如果做了网络隔离,MySQL处于一个相对安全的网络环境,那么开启skip-name-resolve选项将会最大程度避免这个问题。

解决办法:
方法一:启动MySQL的时候,添加 --skip-name-resolve选项,禁止域名解析,问题解决。

示例:
/usr/local/mysql-5.1.36/bin/mysqladmin -u root -p shutdown
/usr/local/mysql-5.1.36/bin/mysqld_safe --skip-name-resolve &


方法二:在my.cnf的[mysqld]一节中增加skip-name-resolve

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值