> 文档中心 > Docker MySQL开启连接限制与密码复杂度方案

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


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

  • 产品: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 bashmysql -uroot -pSELECT 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中备份数据库参数文件

cp /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

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

vi mysqld.cnf#增加插件加载及相关参数plugin-load="validate_password.so;connection_control.so"#防止插件在数据库运行时被卸载connection-control=FORCE_PLUS_PERMANENTconnection-control-failed-login-attempts=FORCE_PLUS_PERMANENTvalidate-password = FORCE_PLUS_PERMANENTvalidate_password_length=8validate_password_mixed_case_count=1validate_password_number_count=1validate_password_policy=MEDIUMvalidate_password_special_char_count=1connection_control_failed_connections_threshold=4connection_control_min_connection_delay=600000connection_control_max_connection_delay=2147483000

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

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

5、重启数据库

#在Docker中关闭数据库docker exec -it ae86114514a8 bashservice mysql stop#在宿主机启动Dockerdocker start ae86114514a8#检查Docker运行状态docker ps -a

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

docker exec -it ae86114514a8 bashmysql -uroot -pSELECT 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、验证业务可用性

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

变更检验

连续使用5次错误密码连接数据库,验证延迟时间,验证成功后使用正确密码登录;

回退方案

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

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

2、重启数据库

#在Docker中关闭数据库docker exec -it ae86114514a8 bashservice mysql stop#在宿主机启动Dockerdocker start ae86114514a8#检查Docker运行状态docker ps -a

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

在这里插入图片描述

医疗百科