等保需求
MySQL密码复杂度改成STRONG
MySQL密码设置90天有效期
MySQL设置用户登录失败处理锁定时间功能
MySQL设置登录超时过期时间
MySQL设置三权用户
MySQL设置日志审计功能
操作方案
一、 操作前注意事项
- 密码策略变更和连接超时设置可能导致老旧应用无法连接,客户端工具无法连接。
- 审计日志会占用大量磁盘空间,做好实时监控工作。
- 操作前备份MySQL配置文件my.cnf。
- 先在测试环境做好方案的验证工作。
- 提前和业务部门沟通割接变更窗口,修改完后验证所有应用是否正常。
- 检查并记录数据库中的用户:select user,host from mysql.user;
二、等保设置
1、MySQL密码复杂度改成STRONG
检查密码校验组件(Validate Password)是否安装:
SHOW VARIABLES LIKE 'validate_password%';
安装组件(如果未安装):
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
设置密码策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
持久化配置(修改my.cnf):
[mysqld]
validate_password.policy = STRONG
validate_password.length = 12
重启MySQL服务使配置生效。
2、设置密码有效期(90天)
数据库全局设置:
SET GLOBAL default_password_lifetime = 90;
持久化配置(修改my.cnf):
[mysqld]
default_password_lifetime = 90
3、设置登录失败处理与账户锁定功能
此功能需要CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件。
安装插件:
INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'connection%';
配置策略:
SET GLOBAL connection_control_failed_connections_threshold = 6; -- 设置失败阈值为6次
SET GLOBAL connection_control_min_connection_delay = 600000; -- 超过最大失败次数之后阻塞登录最小时间为10分钟(单位毫秒)
查看登录失败次数:
SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
持久化配置(修改my.cnf):
[mysqld]
plugin-load-add = connection_control.so
connection_control_failed_connections_threshold = 6
connection_control_min_connection_delay = 600000
4、设置登录超时(非交互式连接等待时间)
设置wait_timeout和interactive_timeout变量,控制非活动连接的自动断开时间。
-- 设置全局超时为14400秒(4小时)
SET GLOBAL wait_timeout = 14400; -- 非交互式连接超时时间,4小时
SET GLOBAL interactive_timeout = 14400; -- 交互式连接超时时间,4小时
-- 查看当前会话的超时设置
SHOW VARIABLES LIKE '%timeout%';
持久化配置(修改my.cnf):
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
5、设置三权用户(权限分离)
等保要求数据库系统管理员、安全管理员、审计员职责分离。
系统管理员(DBA):负责数据库安装、配置、备份恢复。通常是 root,但应禁止远程登录:
--如果数据库中有root@%用户,但是无root@localhost用户:
UPDATE mysql.user SET Host = 'localhost' WHERE User = 'root' AND Host = '%';
FLUSH PRIVILEGES;
--如果数据库中既有root@%用户,又有root@localhost用户,把root@%修改为admin@%用户:
特别注意:需要确认下程序中有没有用到root@%用户连接数据库,否则会影响业务
UPDATE mysql.user SET user = 'admin' WHERE User = 'root' AND Host = '%';
FLUSH PRIVILEGES;
安全管理员 (SecAdmin) - 负责用户管理、权限分配、安全策略(如密码、审计策略)
CREATE USER 'sec_admin'@'localhost' IDENTIFIED BY '*******';
-- 授权:允许其创建、修改、删除用户,但不允许操作业务数据或授予其他权限。
GRANT CREATE USER ON *.* TO 'sec_admin'@'localhost';
GRANT SELECT ON mysql.user TO 'sec_admin'@'localhost'; -- 允许查看用户信息
GRANT RELOAD ON *.* TO 'sec_admin'@'localhost'; -- 可能需要 reload 权限来使部分权限生效
FLUSH PRIVILEGES;
审计管理员 (AuditAdmin) - 负责查看、分析日志
CREATE USER 'audit_admin'@'localhost' IDENTIFIED BY '*******';
-- 授权:仅允许查询审计日志相关的表或文件(需根据审计日志存放位置授权)
GRANT SELECT ON information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS TO 'audit_admin'@'localhost';-- 失败登录记录
-- 如果通用日志或慢查询日志开启为TABLE,则授权
-- GRANT SELECT ON mysql.general_log TO 'audit_admin'@'localhost';
FLUSH PRIVILEGES;
6、设置日志审计功能
开启通用查询日志(General Log)(审计所有操作,对性能影响大,且占用磁盘空间,慎用,如果开启务必实时监控磁盘使用率):
数据库全局设置:
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'FILE';
持久化配置(修改my.cnf):
[mysqld]
general_log = ON
general_log_file = /data/mysql/general.log
log-output = FILE
三、 操作后验证
-
密码复杂度:
- 尝试创建用户并设置简单密码(如Aa123456),看是否会报错。
create USER 'test'@'%' IDENTIFIED BY 'Aa123456'; -
密码有效期:
- 创建一个测试用户,设置密码立即过期,尝试登录看是否被强制修改密码。
CREATE USER 'testexpire'@'localhost' IDENTIFIED BY 'TempPass123!'; ALTER USER 'testexpire'@'localhost' PASSWORD EXPIRE; -- 然后用该用户登录执行命令(如show databases),会提示必须修改密码 -
登录失败锁定:
- 故意用错误密码连接数据库6次,看第7次连接是否被明显延迟10分钟(根据配置)。
-
连接超时:
- 建立一个连接后,等待4小时(根据配置),看是否会自动断开。
-
权限验证:
- 分别用
root@localhost,sec_admin,audit_admin账户登录,验证其权限是否与设计一致(如sec_admin无法创建数据库,audit_admin无法修改数据)。
- 分别用
-
日志审计:
- 执行一些SQL操作,然后检查对应的日志文件(
general_log,)是否正常生成并记录了相关操作。
- 执行一些SQL操作,然后检查对应的日志文件(
四、 回滚方案
如果变更过程中出现严重问题,立即回滚:
- 停止MySQL服务。
- 恢复备份的my.cnf配置文件。
- 启动MySQL服务。
关于作者
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证、MySQL 8.0 OCP认证以及OBCA、KCP、KCSM、ACP、YCP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~




