01-MySQL测评命令

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 PRIVILEGESGRANT 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,再选用对应命令。

主流版本分档

  1. MySQL 5.7

  2. MySQL 8.0

  3. MySQL 8.4

重点差异

A. 身份鉴别

  1. 5.7 常见认证插件:mysql_native_password

  2. 8.0 默认常见认证插件:caching_sha2_password

  3. 8.4 延续 8.0 思路,但现场更应优先核查组件和安全默认项

推荐命令:

select user, host, plugin from mysql.user;
show variables like 'validate_password%';

兼容提示:

  1. validate_password 查询不到,补查是否使用组件、PAM、AD、堡垒机或统一认证。

  2. 5.7 现场遗留脚本常用 Password 字段,实际应优先查看 authentication_string 与插件类型。

B. 访问控制

  1. 5.7 角色能力弱于 8.0

  2. 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;

兼容提示:

  1. 若 5.7 没有角色设计,需按账户直接授权方式取证。

C. 安全审计

  1. 5.7/8.0/8.4 都要区分普通日志与真正审计能力

  2. 企业版或第三方审计更常见

推荐命令:

show variables like 'general_log';
show variables like 'log_error';
show variables like 'audit_log%';
show plugins;

D. 备份恢复与高可用

  1. 5.7 常见命令:show slave status\G

  2. 8.0 开始逐步引入 replica/source 新术语

  3. 现场兼容性最稳妥写法仍建议同时准备旧新两套命令

推荐命令:

show master status;
show slave status\G
show replica status;
show status like 'group_replication%';

现场编制建议

  1. MySQL 5.7 现场重点关注:老旧认证方式、审计能力不足、角色设计不完善。

  2. MySQL 8.0 现场重点关注:角色、认证插件、强制加密传输、高可用状态。

  3. MySQL 8.4 现场重点关注:与 8.0 基本一致,但注意新默认项和组件化差异。

取证注意事项

  1. 旧版命令里出现 Password 字段时,不要直接照抄,应先确认当前版本字段是否仍可用。

  2. 复制命令优先同时准备 slavereplica 两套写法。

  3. 若现场是云数据库或托管版,很多 OS 侧证据要改由控制台或运维平台取证。