依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级”安全计算环境” 条款,结合 MySQL 5.7/8.0 官方文档及等保测评现场实践,给出可直接落地的 测评命令与操作清单。
已在 MySQL 5.7.28+ / MySQL 8.0 环境验证通过。
一、身份鉴别(8.1.4.1)
1.1 账户唯一性与密码复杂度
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SELECT user, host FROM mysql.user; | 检查账户唯一性 | 无同名账户(user+host组合唯一) |
SELECT user, host, authentication_string FROM mysql.user WHERE authentication_string=''; | 检查空口令账户 | 无返回行(无空口令) |
SHOW VARIABLES LIKE 'validate_password%'; | 查看密码复杂度策略 | validate_password_length=8,validate_password_policy=MEDIUM |
SHOW GLOBAL VARIABLES LIKE 'default_password_lifetime'; | 密码有效期 | ≤90天(建议值90) |
1.2 登录失败处理与会话超时
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SHOW VARIABLES LIKE 'max_connect_errors'; | 登录失败锁定阈值 | ≤10次(建议值5-10) |
SHOW VARIABLES LIKE 'connection_control%'; | 失败后延迟登录(需插件) | connection_control_failed_connections_threshold=5,connection_control_min_connection_delay=1000 |
SHOW VARIABLES LIKE '%timeout%'; | 会话超时时间 | wait_timeout≤600,interactive_timeout≤600(秒) |
注:
connection_control插件需手动安装:INSTALL PLUGIN connection_control SONAME 'connection_control.so';
1.3 远程管理加密传输
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SHOW VARIABLES LIKE '%have_ssl%'; | 检查SSL支持 | have_ssl=YES |
SHOW GLOBAL VARIABLES LIKE 'require_secure_transport'; | 强制加密通信 | ON(强制SSL/TLS) |
1.4 双因子认证(高风险项)
测评方法:
- 访谈确认:是否通过堡垒机、操作系统层或第三方工具实现双因子(如Ukey+口令、短信验证码)
- 技术核查:MySQL原生不支持双因子认证,必须依赖外部集成
判定标准:若仅使用单一口令认证,不符合三级要求
二、访问控制(8.1.4.2)
2.1 账户与权限最小化
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SELECT user, host, account_locked FROM mysql.user; | 检查默认账户状态 | 重命名或删除root,锁定多余账户(account_locked=Y) |
SHOW GRANTS FOR 'user'@'host'; | 查看用户权限 | 遵循最小权限原则,禁止非管理员持有ALL PRIVILEGES |
SELECT * FROM mysql.db; | 检查库级权限 | 无越权授权 |
SELECT * FROM mysql.tables_priv; | 检查表级权限 | 权限粒度精确到表级 |
2.2 权限分离与默认账户清理
关键整改命令:
-- 删除匿名账户
DELETEFROM mysql.userWHEREuser='';
FLUSH PRIVILEGES;
-- 重命名root账户(MySQL 8.0)
RENAMEUSER'root'@'localhost'TO'admin'@'localhost';
-- 锁定多余账户
ALTERUSER'test'@'%' ACCOUNT LOCK;
三、安全审计(8.1.4.3)
3.1 审计功能启用与日志保护
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SHOW VARIABLES LIKE 'general_log%'; | 通用查询日志 | general_log=ON,路径可追溯 |
SHOW VARIABLES LIKE 'log_bin%'; | 二进制日志(操作审计) | log_bin=ON |
SHOW VARIABLES LIKE 'log_output'; | 日志存储方式 | FILE(避免仅TABLE,防止日志被篡改) |
SHOW VARIABLES LIKE 'expire_logs_days'; | 日志保留时间 | ≥180天 |
3.2 审计进程保护
测试方法:
# 使用非审计管理员账户登录,尝试关闭审计(应失败)
mysql -u app_user -p
mysql> SET GLOBAL general_log = OFF;
-- 预期结果:ERROR 1227(42000): Access denied; you need (at least one of) the SUPER privilege(s)for this operation
合规要求:只有
SUPER权限用户可修改审计配置,审计员与DBA权限分离
四、入侵防范(8.1.4.4)
4.1 最小化安装与漏洞修复
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SELECT VERSION(); | 查看数据库版本 | 非EOL版本(MySQL 5.7≥5.7.28,或MySQL 8.0+),定期更新补丁 |
SHOW PLUGINS; | 检查非必要插件 | 禁用高风险插件(如test_plugin、validate_password未启用时) |
4.2 网络访问控制
| 测评命令 | 功能说明 | 达标判据 |
|---|---|---|
SELECT user, host FROM mysql.user; | 限制登录IP | host字段非%,仅允许特定IP或网段 |
SHOW VARIABLES LIKE 'skip_networking'; | 禁用远程访问 | 如仅本地管理,设为ON |
SHOW VARIABLES LIKE 'bind_address'; | 监听地址绑定 | 非0.0.0.0,仅业务网卡IP |
五、恶意代码防范(8.1.4.5)
| 测评方法 | 达标判据 |
|---|---|
systemctl is-active clamd(OS层) | 杀毒软件实时保护开启 |
freshclam --version(OS层) | 病毒库更新≤24小时 |
MySQL无原生命令支持,依赖操作系统层防护
六、高风险项重点核查清单
| 检查项 | 验证命令/方法 | 整改要求 |
|---|---|---|
| 双因子认证缺失 | 访谈记录 + 登录测试 | 通过堡垒机或OS层实现双因子 |
| SSL未强制启用 | SHOW GLOBAL VARIABLES LIKE 'require_secure_transport'; | 设为ON |
| 默认账户未清理 | SELECT user FROM mysql.user WHERE user='root'; | 重命名root或限制登录IP |
| 审计日志未开启 | SHOW VARIABLES LIKE 'general_log'; | 设为ON并配置日志服务器远程备份 |
| 密码复杂度未配置 | SHOW VARIABLES LIKE 'validate_password%'; | 安装插件并配置MEDIUM策略 |
七、一键巡检脚本(可直接使用)
#!/bin/bash
# MySQL 等保三级一键巡检脚本
# 适用:MySQL 5.7.28+ / MySQL 8.0+
MYSQL_USER="root"
MYSQL_PASS="your_password"
MYSQL_HOST="localhost"
echo"===== 1 身份鉴别 ====="
mysql -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST-e"
SELECT '空口令账户',user,host FROM mysql.user WHERE authentication_string='';
SHOW VARIABLES LIKE 'validate_password%';
SHOW GLOBAL VARIABLES LIKE 'default_password_lifetime';
SHOW VARIABLES LIKE '%timeout%';
SHOW VARIABLES LIKE '%have_ssl%';
SHOW GLOBAL VARIABLES LIKE 'require_secure_transport';
"
echo"===== 2 访问控制 ====="
mysql -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST-e"
SELECT user,host,account_locked FROM mysql.user;
SELECT * FROM mysql.db WHERE Db NOT IN ('mysql','sys','information_schema','performance_schema');
"
echo"===== 3 安全审计 ====="
mysql -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST-e"
SHOW VARIABLES LIKE 'general_log%';
SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'log_output';
SHOW VARIABLES LIKE 'expire_logs_days';
"
echo"===== 4 入侵防范 ====="
mysql -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST-e"
SELECT VERSION();
SHOW VARIABLES LIKE 'skip_networking';
SHOW VARIABLES LIKE 'bind_address';
"
八、测评执行要点
1. 权限要求
- 系统命令需操作系统
root权限 - 数据库命令需
SUPER或GRANT OPTION权限 - 建议创建专用测评账户:
GRANT SELECT, SHOW DATABASES, SHOW VIEW ON *.* TO 'auditor'@'localhost';
2. 现场核查重点
- 密码复杂度:不仅看配置,还需尝试创建弱口令用户验证策略是否生效
- 审计完整性:抽查
general_log或binlog是否包含关键操作(用户变更、权限修改) - 权限分离:确认
SUPER权限仅DBA持有,业务用户无审计配置权限
3. 高风险项判定
| 风险项 | 判定标准 | 整改建议 |
|---|---|---|
| 双因子认证缺失 | 仅单一口令认证 | 部署堡垒机或IAM集成 |
| 审计未启用 | general_log=OFF且无第三方审计 | 启用general_log或部署数据库审计系统 |
| 审计进程无保护 | 普通用户可SET GLOBAL修改审计 | 回收SUPER权限,实施三权分立 |
| 恶意代码无防范 | OS层无杀毒软件 | 部署ClamAV或商业杀毒软件 |
九、MySQL 5.7 vs 8.0 差异说明
| 功能项 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 默认认证插件 | mysql_native_password | caching_sha2_password(更安全) |
| 角色管理 | 不支持 | 支持CREATE ROLE,便于三权分立 |
| 密码管理 | 仅全局策略 | 支持PASSWORD HISTORY、PASSWORD REUSE INTERVAL |
| 审计插件 | 需第三方(如McAfee) | 支持audit_log官方插件 |
参考标准:GB/T 22239-2019、GB/T 28448-2019
适用版本:MySQL 5.7.28+、MySQL 8.0+
验证环境:CentOS 7.6 / Ubuntu 20.04 / EulerOS 2.0
声明:来自汪汪虚拟空间,仅代表创作者观点。链接:https://eyangzhen.com/6310.html