赞
踩
根据等保要求,生产数据库需开启连接限制与密码复杂度功能,防止数据库被恶意爆破;
通过使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。