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