Docker环境MySQL开启连接限制与密码复杂度方案

admin 2022年4月7日20:31:28评论98 views字数 3710阅读12分22秒阅读模式
  • 产品:Docker MySQL

  • 版本:5.6

  • 环境:CentOS Linux 7


文章目录

  • Docker MySQL开启连接限制与密码复杂度方案

      • 方案背景

      • 变更内容

      • 变更范围

      • 变更影响

      • 风险评估

      • 实施方案

      • 变更检验

      • 回退方案

    • 关注公众号,学习更多运维实战案例!


方案背景

根据等保要求,生产数据库需开启连接限制与密码复杂度功能,防止数据库被恶意爆破;

  • 连接限制

通过使用connection_control插件,对多次连接失败的客户端增加响应延迟;

在客户端多次连接失败产生延迟后,输入正确的用户名密码,可成功登录数据库,但该次登录仍会被延迟,登录成功后连接失败记录将被清空,之后该客户端的连接将恢复正常,重新开始计算。

  • 密码复杂度

通过使用validate_password插件,对数据库账号启用安全的密码复杂度策略,后续进行账号密码设置时,需要满足密码复杂度策略要求。

变更内容

序号 变更步骤 操作时长
1 检查数据库插件加载情况 2分钟
2 备份数据库参数文件 5分钟
3 修改数据库参数文件 5分钟
4 重启数据库 5分钟
5 检查数据库插件加载情况 2分钟
6 验证业务可用性 10分钟

变更范围

序号 服务器用途 服务器IP Docker ID 数据库端口
1 生产库 192.168.1.14 ae86114514a8 24599

变更影响

变更过程中对业务影响 变更后对业务影响 预估操作影响时长
业务中断,无法对外提供服务 30分钟

风险评估

操作过程存在一定风险,针对主要风险作出以下应对。对于风险状态的判断由实施当天的实施小组进行讨论后判定,提请现场工作组总指挥确认是否启动应急措施。

序号 风险点描述 影响范围 风险等级 应急措施
1 数据库启动异常 业务无法访问数据库 变更前备份数据库参数文件,发生异常时根据异常信息修复;
2 应用连接数据库异常 用户无法访问业务 根据回退方案对相关变更内容进行回退;

实施方案

1、在Docker中检查数据库插件加载情况:

docker exec -it ae86114514a8 bash

mysql -uroot -p
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'connection%';
Empty set (0.00 sec)

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%';
Empty set (0.00 sec)

查询结果均为:Empty set,表示当前未加载相关插件;

2、在Docker中备份数据库参数

#确认mysql用户对参数文件有可读权限
ls -l /etc/mysql/mysql.conf.d/mysqld.cnf

#备份参数文件,使用-p参数连文件权限一起备份
cp -p /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak

#从docker中拷贝到宿主机,以防万一
docker cp mysql:/etc/mysql/mysql.conf.d /tmp

#记录参数信息,防止数据库重启后在线修改的参数值丢失
mysql -uroot -p -e"show global variables;" > /tmp/mysql_golbal_var.log

3、在宿主机修改数据库参数文件

vi mysqld.cnf

#增加插件加载及相关参数
plugin-load="validate_password.so;connection_control.so"

#防止插件在数据库运行时被卸载
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
validate-password = FORCE_PLUS_PERMANENT

validate_password_length=8
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_policy=MEDIUM
validate_password_special_char_count=1

connection_control_failed_connections_threshold=4
connection_control_min_connection_delay=600000
connection_control_max_connection_delay=2147483000

4、将修改好的数据库参数文件从宿主机拷贝到docker中覆盖

docker cp /tmp/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/

5、重启数据库

#在Docker中关闭数据库
docker exec -it ae86114514a8 bash
service mysql stop

#在宿主机启动Docker
docker start ae86114514a8

#检查Docker运行状态
docker ps -a

6、在Docker中检查数据库插件加载情况

docker exec -it ae86114514a8 bash

mysql -uroot -p
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 |
+------------------------------------------+---------------+

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%';
+-------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+

查询结果均为:ACTIVE,表示当前已加载相关插件;

7、对比重启前后数据库参数值

mysql -uroot -p -e"show global variables;" > /tmp/mysql_golbal_var_2.log

diff /tmp/mysql_golbal_var.log /tmp/mysql_golbal_var_2.log

8、验证业务可用性

开启应用,通知用户登录应用,验证业务可用性。

变更检验

使用错误密码连接数据库验证;

#确认有账号连接失败的测试记录
select * from information_schema.Connection_control_failed_login_attempts;

show status like 'Connection_control_delay_generated';

#通过修改连接失败触发次数参数,可重置失败记录数,避免影响业务
set global connection_control_failed_connections_threshold=4;

回退方案

1、在Docker中恢复数据库参数文件

mv /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak2
mv /etc/mysql/mysql.conf.d/mysqld.cnf.bak /etc/mysql/mysql.conf.d/mysqld.cnf

2、重启数据库

#在Docker中关闭数据库
docker exec -it ae86114514a8 bash
service mysql stop

#在宿主机启动Docker
docker start ae86114514a8

#检查Docker运行状态
docker ps -a


创作不易,如需转载本公众号原创文章,均需在文章明显位置注明出处,或插上公众号名片,醒狮运维团队每周将对抄袭的文章进行举报,投诉


关注醒狮运维公众号,了解更多运维知识及漏洞资讯!


原文始发于微信公众号(醒狮运维):Docker环境MySQL开启连接限制与密码复杂度方案

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月7日20:31:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Docker环境MySQL开启连接限制与密码复杂度方案http://cn-sec.com/archives/886982.html

发表评论

匿名网友 填写信息