前言
一般我们开发环境的MySQL是没有配置登录保护的,但仅限于开发环境,正式环境是不允许无限制登录,存在很大的风险。
MySQL 5.7 以后提供了Connection-Control插件用来控制客户端在登录操作连续失败一定次数后的响应的延迟。该插件可有效的防止客户端暴力登录的风险(攻击)。该插件包含以下两个组件:
connection_control
:控制失败次数以及延迟时间connection_control_failed_login_attempts
:将登录失败的操作记录至information_schema
表
插件安装
增加配置文件
[root@instance-8nde4305 ~]# vi /etc/my.cnf
// 添加以下配置
[mysqld]
plugin-load-add=connection_control.so
connection-control=FORCE
connection-control-failed-login-attempts= FORCE
connection_control_min_connection_delay=1000
connection_control_max_connection_delay=86400
connection_control_failed_connections_threshold=3
执行安装命令
# 使用root账户登录
[root@instance-8nde4305 ~]# mysql -u root -p
mysql> install plugin connection_control soname "connection_control.so";
mysql> install plugin connection_control_failed_login_attempts soname "connection_control.so";
验证插件安装状态
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)
修改插件配置
[root@instance-8nde4305 ~]# vi /etc/my.cnf
# 修改以下配置,并重启MySQL
# 阻塞一分钟
connection_control_min_connection_delay=60000
connection_control_max_connection_delay=86400
# 可错误五次
connection_control_failed_connections_threshold=5
# 超时时间
wait_timeout=600
# 空闲时间
interactive_timeout=600
查看修改后的配置
[root@instance-8nde4305 ~]# mysql -u root -p;
mysql> show variables like 'connection_control%';
+-------------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 5 |
| connection_control_max_connection_delay | 86400 |
| connection_control_min_connection_delay | 60000 |
+-------------------------------------------------+------------+
3 rows in set (0.00 sec)
mysql> show variables like 'interactive%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| interactive_timeout | 600 |
+---------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'wait_%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 600 |
+---------------+-------+
1 row in set (0.00 sec)
测试结果
使用系统,尝试登陆失败五次后,则会出现阻塞;
查看登陆记录
mysql> use information_schema;
// 查看用户登录失败次数,当用户登录成功则删除记录
mysql> select * from connection_control_failed_login_attempts;
// 连接控制的使用次数
mysql> show global status like 'connection_control_delay_generated';
最后一次更新于2020-12-21 22:37:00
5 条评论