01-MySQL测评命令
Categories:
8 分钟阅读
MySQL数据库三级等级保护现场核查命令脚本(统一编号版)
适用范围:MySQL 5.7/8.0
基础信息
select version(); -- 查看数据库版本
select @@hostname, @@port; -- 查看实例名与端口
select @@basedir, @@datadir, @@socket; -- 查看安装目录、数据目录、socket
show databases; -- 查看数据库列表
select user(), current_user(); -- 查看当前登录用户
- 备注:用于确认数据库类型、版本、实例标识和现场连接身份。
- 预期证据:版本查询结果截图、实例信息截图、数据库列表截图。
示例输出(节选)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.36 |
+-----------+
mysql> select @@hostname, @@port;
+--------------------+-------+
| @@hostname | @@port|
+--------------------+-------+
| db01 | 3306 |
+--------------------+-------+
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| appdb |
+--------------------+
身份鉴别
A. 身份标识唯一、口令复杂度、定期更换
select user, host from mysql.user order by user, host;
show variables like 'validate_password%';
show plugins;
show variables like 'default_password_lifetime';
select user, host, password_lifetime, password_expired, account_locked from mysql.user;
- 备注:重点看账户是否唯一、是否存在匿名/共享账户,是否配置口令复杂度与有效期。若未启用复杂度插件,需说明是否由 AD、PAM、堡垒机或统一身份认证平台实现。
- 预期证据:账户列表截图、
validate_password或等效策略截图、口令有效期截图、账号管理制度或账号台账。
示例输出(节选)
mysql> select user, host from mysql.user order by user, host;
+----------+--------------+
| user | host |
+----------+--------------+
| appuser | 192.168.10.% |
| backup | localhost |
| root | localhost |
+----------+--------------+
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.policy | MEDIUM |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| default_password_lifetime | 90 |
+---------------------------+-------+
B. 登录失败处理、会话超时退出
show variables like 'connection_control%';
show variables like 'max_connect_errors';
show global variables like 'wait_timeout';
show global variables like 'interactive_timeout';
show status like 'aborted_connects';
- 备注:重点看是否具备失败登录限制、账户锁定或外围防暴力破解能力,是否设置超时自动退出。社区版原生能力有限时,应补查堡垒机、WAF、主机策略或中间件控制。
- 预期证据:相关参数截图、第三方登录失败处理策略截图、运维平台超时配置截图、访谈记录。
示例输出(节选)
mysql> show variables like 'connection_control%';
+-------------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 5 |
| connection_control_min_connection_delay | 1000 |
+-------------------------------------------------+------------+
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 600 |
+---------------+-------+
mysql> show status like 'aborted_connects';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Aborted_connects | 12 |
+------------------+-------+
C. 远程管理传输保密
show variables like 'require_secure_transport';
show variables like 'have_ssl';
show variables like 'ssl_ca';
show variables like 'ssl_cert';
show variables like 'ssl_key';
show status like 'Ssl_cipher';
- 备注:重点看是否支持并实际启用了 SSL/TLS。仅“支持 SSL”不等于“已强制使用 SSL”,还需结合客户端连接方式和远程管理流程判断。
- 预期证据:SSL 相关参数截图、当前连接
Ssl_cipher截图、证书文件配置截图、堡垒机/远程管理链路说明。
示例输出(节选)
mysql> show variables like 'require_secure_transport';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | ON |
+--------------------------+-------+
mysql> show variables like 'ssl_cert';
+---------------+-------------------------------+
| Variable_name | Value |
+---------------+-------------------------------+
| ssl_cert | /opt/app/mysql/server-cert.pem|
+---------------+-------------------------------+
mysql> show status like 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256 |
+---------------+--------------------+
D. 组合鉴别
show plugins;
- 备注:MySQL 原生通常不直接实现双因素,现场应核查是否通过 PAM、堡垒机、数据库运维平台、MFA 平台等实现组合鉴别。
- 预期证据:双因素登录界面截图、堡垒机认证策略截图、统一认证平台策略截图、访谈记录。
示例输出(节选)
mysql> show plugins;
+----------------------------+----------+--------------------+
| Name | Status | Type |
+----------------------------+----------+--------------------+
| caching_sha2_password | ACTIVE | AUTHENTICATION |
| mysql_native_password | ACTIVE | AUTHENTICATION |
| sha256_password | ACTIVE | AUTHENTICATION |
| ... | ... | ... |
+----------------------------+----------+--------------------+
访问控制
A. 账户、角色、权限分配
select user, host, account_locked, password_expired from mysql.user;
show grants for 'root'@'localhost';
select * from information_schema.user_privileges;
select * from information_schema.schema_privileges;
select * from information_schema.table_privileges;
select * from information_schema.column_privileges;
- 备注:重点核查高危权限、角色划分、管理员权限分离和多人共用 root 的情况。重点关注
ALL PRIVILEGES、GRANT OPTION、高权限业务账户。 - 预期证据:高权限账户截图、授权结果截图、角色分工说明、账号权限审批记录。
示例输出(节选)
mysql> show grants for 'root'@'localhost';
+------------------------------------------------------------------+
| Grants for root@localhost |
+------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION |
+------------------------------------------------------------------+
mysql> select * from information_schema.schema_privileges limit 3;
+-------------+---------------+-------------------------+--------------+
| GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | PRIVILEGE_TYPE|
+-------------+---------------+-------------------------+--------------+
| 'appuser'@'192.168.10.%' | def | appdb | SELECT |
| 'appuser'@'192.168.10.%' | def | appdb | INSERT |
| 'report'@'localhost' | def | appdb | SELECT |
+-------------+---------------+-------------------------+--------------+
B. 默认账户、多余账户、来源地址限制
select user, host from mysql.user order by user, host;
select user, host from mysql.user where user='' or user is null;
- 备注:重点关注匿名账户、测试账户、过期账户和来源为
%的账户,确认是否限制了管理来源地址。 - 预期证据:用户来源地址截图、匿名账户核查结果截图、账号清理记录、来源地址控制策略截图。
示例输出(节选)
mysql> select user, host from mysql.user where user='' or user is null;
Empty set (0.00 sec)
mysql> select user, host from mysql.user;
+----------+--------------+
| user | host |
+----------+--------------+
| appuser | 192.168.10.% |
| root | localhost |
+----------+--------------+
C. 细粒度授权与最小权限
select * from mysql.user\G
select * from mysql.db\G
select * from mysql.tables_priv\G
select * from mysql.columns_priv\G
- 备注:重点抽查重要业务库、重要表、敏感字段的细粒度授权情况,确认是否按最小权限原则授权。
- 预期证据:库级/表级/列级授权截图、重要业务账号权限抽查记录、权限申请审批记录。
示例输出(节选)
mysql> select user, host, db from mysql.db\G
*************************** 1. row ***************************
user: appuser
host: 192.168.10.%
db: appdb
mysql> select user, host, db, table_name from mysql.tables_priv\G
*************************** 1. row ***************************
user: report
host: localhost
db: appdb
table_name: t_order
D. 角色继承与特殊角色
select * from mysql.role_edges;
show grants for 'role_name';
- 备注:按实际角色名替换
role_name,重点说明角色继承链是否清晰、是否存在过度授权。 - 预期证据:角色继承关系截图、角色授权截图、角色设计说明。
示例输出(节选)
mysql> select * from mysql.role_edges;
+-----------+-----------+---------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+-----------+---------+---------+-------------------+
| % | app_read | localhost | appuser | N |
| % | app_write | localhost | appuser | N |
+-----------+-----------+---------+---------+-------------------+
mysql> show grants for 'app_read';
+----------------------------------------------------+
| Grants for app_read@% |
+----------------------------------------------------+
| GRANT SELECT ON `appdb`.* TO `app_read`@`%` |
+----------------------------------------------------+
安全审计
A. 审计功能是否开启
show variables like 'log_error';
show variables like 'general_log';
show variables like 'slow_query_log';
show binary logs;
show plugins;
show variables like 'audit_log%';
- 备注:重点核查是否启用可用于安全审计的日志或专用审计能力。普通日志可辅助核查,但更建议核查专用审计插件或第三方数据库审计。
- 预期证据:日志/审计参数截图、审计插件状态截图、第三方数据库审计界面截图。
示例输出(节选)
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
mysql> show variables like 'slow_query_log';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| slow_query_log | ON |
+---------------------+-------+
mysql> show variables like 'audit_log%';
Empty set (0.00 sec)
B. 审计范围与审计对象
show variables like 'log_output';
show variables like 'audit_log_policy';
show variables like 'audit_log_format';
- 备注:重点看是否覆盖登录、权限变更、关键对象访问、失败操作等关键事件,是否满足安全审计取证要求。
- 预期证据:审计策略截图、审计事件样例截图、审计对象范围说明。
示例输出(节选)
mysql> show variables like 'audit_log_policy';
Empty set (0.00 sec)
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
C. 审计日志保护与留存
show variables like 'log_error';
show variables like 'general_log_file';
show variables like 'slow_query_log_file';
show variables like 'log_bin_basename';
- 备注:需结合操作系统侧核查日志目录权限、防篡改措施、集中存储和留存周期,一般还要关注是否定期备份。
- 预期证据:日志路径截图、目录权限截图、日志留存策略、备份策略或日志平台截图。
示例输出(节选)
mysql> show variables like 'log_error';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| log_error | /opt/app/mysql/log/error.log |
+---------------+------------------------------+
mysql> show variables like 'general_log_file';
+------------------+--------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------+
| general_log_file | /opt/app/mysql/log/db01.log |
+------------------+--------------------------------------+
D. 审计失效告警
备注:通常需通过 systemd、监控平台、审计平台告警证明,现场可补查
systemctl status mysqld、日志采集进程状态和告警策略。预期证据:监控告警规则截图、告警消息样例、服务状态截图、运维告警平台截图。
数据完整性
A. 传输过程完整性
show variables like 'require_secure_transport';
show status like 'Ssl_cipher';
- 备注:使用 TLS/SSL 可作为传输完整性的重要证据,还应结合远程管理流程判断是否全链路生效。
- 预期证据:SSL 参数截图、加密连接截图、网络传输加密说明。
示例输出(节选)
mysql> show variables like 'require_secure_transport';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | ON |
+--------------------------+-------+
mysql> show status like 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256 |
+---------------+--------------------+
B. 存储过程完整性
show plugins where plugin_type = 'AUTHENTICATION';
select user, host, plugin from mysql.user;
- 备注:重点说明鉴别数据、重要配置数据、审计数据是否具备防篡改或一致性保护措施。数据库原生命令往往不足以完全证明,需要结合备份、审计、文件权限和制度说明。
- 预期证据:认证插件截图、配置文件权限截图、备份校验记录、制度或技术说明。
示例输出(节选)
mysql> show plugins where plugin_type = 'AUTHENTICATION';
+----------------------------+----------+----------------+
| Name | Status | Type |
+----------------------------+----------+----------------+
| caching_sha2_password | ACTIVE | AUTHENTICATION |
| mysql_native_password | ACTIVE | AUTHENTICATION |
+----------------------------+----------+----------------+
mysql> select user, host, plugin from mysql.user;
+---------+--------------+-----------------------+
| user | host | plugin |
+---------+--------------+-----------------------+
| appuser | 192.168.10.% | caching_sha2_password |
| root | localhost | caching_sha2_password |
+---------+--------------+-----------------------+
数据保密性
A. 传输过程保密性
show variables like 'require_secure_transport';
show status like 'Ssl_cipher';
- 备注:应证明数据库管理连接、重要业务连接在传输过程中采用了密码技术保护。
- 预期证据:SSL/TLS 参数截图、客户端加密连接截图、远程运维链路说明。
示例输出(节选)
mysql> show variables like 'require_secure_transport';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | ON |
+--------------------------+-------+
mysql> show status like 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| Ssl_cipher | ECDHE-RSA-AES128-GCM-SHA256 |
+---------------+--------------------+
B. 存储过程保密性
show plugins where plugin_type = 'AUTHENTICATION';
select user, host, plugin from mysql.user;
- 备注:重点说明鉴别数据是否避免明文存储,以及重要业务数据、个人信息是否通过 TDE、磁盘加密、应用层加密或第三方方案实现静态保护。
- 预期证据:认证插件截图、加密方案说明、磁盘加密截图、应用加密设计或制度材料。
示例输出(节选)
mysql> show plugins where plugin_type = 'AUTHENTICATION';
+----------------------------+----------+----------------+
| Name | Status | Type |
+----------------------------+----------+----------------+
| caching_sha2_password | ACTIVE | AUTHENTICATION |
| mysql_native_password | ACTIVE | AUTHENTICATION |
+----------------------------+----------+----------------+
mysql> select user, host, plugin from mysql.user;
+---------+--------------+-----------------------+
| user | host | plugin |
+---------+--------------+-----------------------+
| appuser | 192.168.10.% | caching_sha2_password |
| root | localhost | caching_sha2_password |
+---------+--------------+-----------------------+
备份恢复
A. 本地数据备份与恢复
show variables like 'log_bin';
show master status;
- 备注:二进制日志开启有利于恢复,但不等于已落实完整备份策略。应结合备份脚本、计划任务和恢复演练记录综合判断。
- 预期证据:备份任务截图、备份脚本、备份结果截图、恢复演练记录。
示例输出(节选)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| binlog.000123 | 45678 | | |
+------------------+----------+--------------+------------------+
B. 异地实时备份
show replica status;
show slave status\G
- 备注:主从复制、组复制、MGR、Galera 等可作为异地实时备份的支撑证据,但仍需证明备份节点位于异地。
- 预期证据:复制状态截图、备机信息截图、异地机房说明、网络拓扑图。
示例输出(节选)
mysql> show replica status\G
*************************** 1. row ***************************
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Source_Host: 192.168.10.21
Source_Port: 3306
Seconds_Behind_Source: 0
mysql> show slave status\G
(5.7 输出字段为 Slave_IO_Running / Slave_SQL_Running / Seconds_Behind_Master)
C. 热冗余与高可用
show status like 'group_replication%';
show status like 'wsrep%';
- 备注:重点确认是否具备热冗余、高可用切换和故障恢复能力,并关注是否开展过演练。
- 预期证据:高可用架构图、切换状态截图、故障切换演练记录。
示例输出(节选)
mysql> show status like 'group_replication%';
+----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| group_replication_primary_member | xxx… |
+----------------------------------+-------+
mysql> show status like 'wsrep%';
Empty set (0.00 sec)
剩余信息保护
A. 鉴别信息所在存储空间释放前清除
备注:MySQL 无明显独立控制项直接证明,需结合存储介质清除制度、虚拟磁盘回收策略、云盘释放策略、销毁记录综合判定。
预期证据:介质清除制度、云平台磁盘释放策略、存储回收说明、销毁记录。
B. 敏感数据所在存储空间释放前清除
备注:需结合磁盘加密、虚拟化回收策略、介质销毁记录判定敏感数据残留风险控制情况。
预期证据:磁盘加密截图、销毁记录、设备回收制度、存储平台策略截图。
个人信息保护
A. 个人信息访问控制与审计
备注:若业务涉及个人信息,应抽查敏感字段访问权限、导出控制、审计留痕和最小权限落实情况。
预期证据:敏感字段权限截图、导出审计截图、账号职责分工说明。
B. 个人信息存储与传输保护
备注:抽查脱敏、加密、专门审计、分类分级等保护措施,不宜仅凭数据库参数单独下结论。
预期证据:脱敏规则截图、加密设计说明、分类分级文件、系统设计材料。
入侵防范
A. 访问来源限制/白名单
备注:结合数据库监听/配置与防火墙策略,确认仅允许授权来源访问。
预期证据:数据库访问控制或监听配置截图、主机/网络防火墙策略、堡垒机访问策略截图。
B. 异常访问与爆破防护
备注:结合登录失败处理、连接限制、WAF/堡垒机/防暴力破解策略,确认具备阻断或告警能力。
预期证据:失败登录限制参数截图、策略截图、告警样例、访谈记录。
C. 漏洞扫描与补丁管理
备注:确认数据库漏洞扫描周期、补丁评估与修复流程。
预期证据:漏洞扫描报告、补丁更新记录、变更单。
D. 恶意代码/工具防护
备注:确认主机侧安全防护软件或EDR对数据库进程的防护与告警能力。
预期证据:安全软件截图、策略配置截图、告警样例。
时间同步与日志一致性
备注:确认数据库服务器时间同步(NTP/chrony),保证审计日志时间一致、可溯源。
预期证据:NTP/chrony 配置截图、时间同步状态截图、运维制度或巡检记录。
主流版本差异说明
MySQL主流版本核查差异说明
版本识别
select version();
show variables like 'version%';
说明:现场先确认是 5.7、8.0 还是 8.4,再选用对应命令。
主流版本分档
MySQL 5.7
MySQL 8.0
MySQL 8.4
重点差异
A. 身份鉴别
5.7 常见认证插件:
mysql_native_password8.0 默认常见认证插件:
caching_sha2_password8.4 延续 8.0 思路,但现场更应优先核查组件和安全默认项
推荐命令:
select user, host, plugin from mysql.user;
show variables like 'validate_password%';
兼容提示:
若
validate_password查询不到,补查是否使用组件、PAM、AD、堡垒机或统一认证。5.7 现场遗留脚本常用
Password字段,实际应优先查看authentication_string与插件类型。
B. 访问控制
5.7 角色能力弱于 8.0
8.0/8.4 可优先核查
mysql.role_edges
推荐命令:
show grants for 'user'@'host';
select * from information_schema.user_privileges;
select * from information_schema.schema_privileges;
select * from information_schema.table_privileges;
8.0/8.4 增补:
select * from mysql.role_edges;
兼容提示:
- 若 5.7 没有角色设计,需按账户直接授权方式取证。
C. 安全审计
5.7/8.0/8.4 都要区分普通日志与真正审计能力
企业版或第三方审计更常见
推荐命令:
show variables like 'general_log';
show variables like 'log_error';
show variables like 'audit_log%';
show plugins;
D. 备份恢复与高可用
5.7 常见命令:
show slave status\G8.0 开始逐步引入
replica/source新术语现场兼容性最稳妥写法仍建议同时准备旧新两套命令
推荐命令:
show master status;
show slave status\G
show replica status;
show status like 'group_replication%';
现场编制建议
MySQL 5.7 现场重点关注:老旧认证方式、审计能力不足、角色设计不完善。
MySQL 8.0 现场重点关注:角色、认证插件、强制加密传输、高可用状态。
MySQL 8.4 现场重点关注:与 8.0 基本一致,但注意新默认项和组件化差异。
取证注意事项
旧版命令里出现
Password字段时,不要直接照抄,应先确认当前版本字段是否仍可用。复制命令优先同时准备
slave和replica两套写法。若现场是云数据库或托管版,很多 OS 侧证据要改由控制台或运维平台取证。