22、应用访问控制测评解读(MySQL 示例)
Categories:
3 分钟阅读
定位:理解解读类文章——说明 MySQL 访问控制控制点七项要求的含义、MySQL 权限模型的实现原理,以及现场如何取证与判定。 适用版本:MySQL 5.6/5.7/8.0(示例环境 MySQL 5.7.x;8.0 起
mysql.user表结构与认证插件有调整,权限层级模型一致)。 配套文章:37、MySQL 数据库测评(全控制点核查命令与判定标准)、01、MySQL 测评命令单、12、MySQL数据库加固。
本文解决的是「这条要求到底在问什么」的问题;现场取证命令与三档判定标准见 37、MySQL 数据库测评 §三 访问控制,两篇配合使用。
使用说明:
- 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
- 命令回显本身即证据,须连同命令行一起截图;示例中的地址、账户、路径均为演示值,现场须替换为真实取证结果,并对个人信息与内网管理地址脱敏后再入报告。
- 命令不存在或输出与示例差异较大时,先确认产品版本与部署形态(单机/集群/容器/云托管),再换用等效命令或转入配置文件、管理控制台取证,不得据命令缺失直接判不符合。
- 文中「默认」「一般」等表述均为初判倾向,须经上机核查 + 访谈 + 配置/制度核对三方印证后定论,并在报告中写明取证来源。
不适用标识说明:
- 使用
【不适用】明确标记现场可判定为不适用的控制点,并写明判定依据。- 依据 GB/T 28448-2019「按测评对象实际承载功能与数据处理范围判定」原则:控制能力由上层应用、统一认证平台、前置代理、堡垒机、宿主操作系统或云托管平台承载时,应注明测评单元边界后判定不适用或转由上位组件核查,不得机械按缺失判不符合。
- 产品版本确实不提供该能力(如社区版无审计插件)时,须核查替代措施并按替代措施的实际效果定档,不得直接判不适用。
一、说明
访问控制是等保测评中分歧最多、也最容易判错的控制点之一。分歧通常不在「有没有配权限」, 而在「配到什么程度算符合」。本文按 a)~g) 七项要求逐一说明其含义、MySQL 的实现方式, 以及现场应取哪些证据。
二、访问控制七项要求
对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~g)
判定要点:账户与权限一一对应、默认账户已处置、无多余与共享账户、管理权限已分离、有书面授权策略、授权粒度达到用户级与表级 → 符合;有权限划分但存在越权高权限账户或粒度仅到角色级 → 部分符合;统一使用超级账户或应用账户持最高权限 → 不符合。
取证要求:账户与角色对照表、权限清单查询输出、默认账户处置记录、访问控制策略文件与授权审批记录、粒度核查(对象级/列级/行级)输出。
应用账户或运维账户直接持有最高权限(DBA/sysadmin/superuser/SYSDBA/root),或系统、安全、审计三类管理职责未分离由同一账户兼任,属高风险线索;默认示例账户(SCOTT、HR、test 等)处于可用状态且沿用出厂口令时按高风险处理。
判定口径详见 22、高风险判定指引与加固对照表。
| 项 | 要求 | 核心问题 |
|---|---|---|
| a | 应对登录的用户分配账户和权限 | 是否按人/按岗建账户,且账户权限有差异 |
| b | 应重命名或删除默认账户,修改默认账户的默认口令 | 默认 root 如何处理,口令是否为强口令 |
| c | 应及时删除或停用多余的、过期的账户,避免共享账户的存在 | 是否存在多余、过期、共用账户 |
| d | 应授予管理用户所需的最小权限,实现管理用户的权限分离 | 权限是否按最小必要分配、是否三权分离 |
| e | 应由授权主体配置访问控制策略,访问策略规定主体对客体的访问规则 | 是否有经授权的策略文件,且实际授权与之一致 |
| f | 访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级 | 客体粒度是否达到表级或更细 |
| g | 应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问 | MySQL 原生不支持,由谁承担 |
三、测评项 a:应对登录的用户分配账户和权限
3.1 要求理解
该要求容易被读成一句废话——既然用户已经登录,自然存在账户。其实际含义是:
- 系统中应存在多个账户;
- 按实际需要把不同权限的账户分配给使用者(自然人);
- 通过「账户 → 权限 → 自然人」的链路实现权限分配。
因此该测评项的落脚点是:数据库中至少存在两个账户,且这两个账户的权限不同。

3.2 MySQL 的默认账户
MySQL 安装完成后默认存在 3 个账户,用户名均为 root:

暂不论其中是否存在多余账户:root 通常作为超级管理员使用,默认拥有全部全局权限,
一般不对 root 的权限做限制。全局权限存储在 mysql.user 表中,以权限列的形式存在:

3.3 核查方法与判定标准
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'username'@'host';
符合:按岗位/人员分别建账户,各账户权限不同,且可对应到具体自然人。
部分符合:存在多个账户但权限划分粗糙(如仅有「管理员」与「应用」两类),或存在少量共用账户。
不符合:所有使用者共用一个账户(通常是一个
root或应用账户),权限无差异。证据留存:
mysql.user查询结果截图、账户与人员对照表、各账户SHOW GRANTS输出、访谈纪要。
四、测评项 b:应重命名或删除默认账户,修改默认账户的默认口令
4.1 要求理解
root 的用户名可以修改,但数据库通常与业务耦合较深,改名会影响业务连接串。
因此从实操角度:
- 建议修改
root用户名,不强制; - 若未改名也未禁用,则必须保证
root使用的是强口令(MySQL 安装时会生成一个随机初始口令, 但现场常见的情况是被改成了弱口令或被清空)。
4.2 核查方法与判定标准
SELECT user, host, authentication_string FROM mysql.user;
SHOW VARIABLES LIKE 'validate%';
符合:已重命名或删除默认账户;或保留
root但已设置强口令且限制host范围。部分符合:保留
root且口令强度尚可,但host为%(允许任意地址)。不符合:默认账户存在且为空口令、弱口令,或沿用安装时的初始随机口令未更换。
证据留存:
mysql.user查询结果截图、口令复杂度核查结论、访谈纪要。
五、测评项 c:应及时删除或停用多余的、过期的账户,避免共享账户的存在
5.1 要求理解
默认账户(多个 root)通常就构成多余账户:

MySQL 中账户的身份标识为 user + host 二元组,且并不禁止出现实际等价的重复行。
上例中三个账户的 user 都是 root,host 表面不同但实际都指向本机:
127.0.0.1:本地回环地址;localhost:经hosts文件映射到127.0.0.1;::1:IPv6 格式的本地地址。
从正常业务需求看,这三个账户的身份标识不唯一,应删除 ::1 与其余重复项中的多余部分。
非默认账户是否为多余账户,则通过访谈或权限查询判断。
::1 行的账户在实践中无法通过 root 用户名连上。若误删了 127.0.0.1 与 localhost 行、
只留下 ::1 行,将导致 root 完全无法登录。现场做账户清理前必须先确认连接方式并做好备份。
5.2 核查方法与判定标准
SELECT user, host, account_locked, password_lifetime FROM mysql.user;
符合:无多余、过期、共享账户;离职人员账户已停用或删除。
部分符合:存在长期未使用但未停用的账户。
不符合:存在共享账户,或离职人员仍保留可用账户。
证据留存:
mysql.user查询结果截图、账户清理记录、在职人员名单对照。
六、测评项 d:应授予管理用户所需的最小权限,实现管理用户的权限分离
6.1 MySQL 的权限结构
MySQL 的权限分多个层级,分别存储在不同的系统表中:
| 层级 | 存储表 | 说明 |
|---|---|---|
| 全局权限 | mysql.user | 作用于所有数据库 |
| 数据库级 | mysql.db | 作用于指定数据库 |
| 表级 | mysql.tables_priv | 作用于指定表 |
| 列级 | mysql.columns_priv | 作用于指定列 |
权限判定过程:客户端通过身份认证后发送操作命令,服务器按下述顺序逐级检查——
先查 user 表(全局权限),未授权则查 db 表(数据库级),再查 tables_priv(表级),
最后查 columns_priv(列级);全部检查完毕仍未找到允许的权限,则返回错误、操作失败。

查询某用户的权限有两种方式:直接查上述权限表,或使用 SHOW GRANTS(会把各表中的权限汇总列出):
SHOW GRANTS FOR 'dba'@'localhost';
SELECT * FROM mysql.user WHERE user = 'dba';
+---------------------------------------------------------------------------------------------+
| Grants for dba@localhost |
+---------------------------------------------------------------------------------------------+
| GRANT RELOAD, SUPER, REPLICATION CLIENT ON *.* TO 'dba'@'localhost' |
| GRANT CREATE TEMPORARY TABLES ON `mysql`.* TO 'dba'@'localhost' |
| GRANT SELECT, INSERT, UPDATE, CREATE, DROP ON `mysql`.`backup_history` TO 'dba'@'localhost' |
| GRANT INSERT, UPDATE, CREATE, DROP ON `mysql`.`ibbackup_binlog_maker` TO 'dba'@'localhost' |
| GRANT INSERT, UPDATE, CREATE, DROP ON `mysql`.`backup_progress` TO 'dba'@'localhost' |
+---------------------------------------------------------------------------------------------+
其中第一行为全局权限,第二行为 mysql 库级权限,第三至五行为表级权限。
两种查询方式的对照:

6.2 判定要求
是否判符合,需结合应用程序的业务复杂程度判断:业务越复杂、越庞大,数据库账户的权限就应划分得越细致。
可以确定的下限是:所有场景都使用同一个 root 账户,必然判不符合。

6.3 核查方法与判定标准
SELECT * FROM mysql.user;
SELECT user, host FROM mysql.user WHERE Super_priv = 'Y' OR File_priv = 'Y' OR Process_priv = 'Y';
符合:按最小权限授权,且
FILE、PROCESS、SUPER等高危权限仅管理员持有,实现三权分离。部分符合:做了权限划分但粒度较粗,或高危权限授予了非管理员账户但无实际危害。
不符合:全部使用同一高权限账户,或存在明显越权账户。
证据留存:
mysql.user查询结果截图、高危权限持有者清单、权限分配表、访谈纪要。
七、测评项 e:应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则
7.1 要求理解
「授权主体」在数据库中即拥有授予他人权限能力的账户,对应 mysql.user、mysql.db 表中的
Grant_priv 字段。授予权限时附加 WITH GRANT OPTION,即表示该账户可将自己获得的权限再授予他人
(本质上是同时修改了 Grant_priv 字段):
GRANT ALL ON *.* TO 'test'@'192.168.1.20' IDENTIFIED BY '<password>' WITH GRANT OPTION;
FLUSH PRIVILEGES;
执行后该账户的 Grant_priv 为 Y。
⚠️ 原文示例中使用的是中文弯引号
’(从网页/文档复制粘贴带入),直接执行会报语法错误。 现场所有 SQL 均须使用英文半角单引号',这是 MySQL 测评中最常见的低级失误之一。
7.2 核查方法与判定标准
SELECT user, host, Grant_priv FROM mysql.user WHERE Grant_priv = 'Y';
符合:存在明确的授权主体(通常为安全管理员),且有经其审批的访问控制策略文件,实际授权与策略一致。
部分符合:有授权主体但无书面策略,或策略与实际情况存在偏差。
不符合:无明确授权主体,权限由多人随意分配且无记录。
证据留存:
Grant_priv = 'Y'的账户清单、访问控制策略文件、审批记录、访谈纪要。
八、测评项 f:访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级
8.1 要求理解
本项关注粒度:
- 客体:是否达到数据库表级(视图、存储过程同样可视为客体)。仅做到数据库级或服务器级,不符合要求。
- 主体:MySQL 中不存在用户组的概念,主体天然为账户(用户)级。
8.2 核查方法与判定标准
SELECT * FROM mysql.tables_priv;
SELECT * FROM mysql.columns_priv;
符合:存在表级或列级授权(客体粒度达到表级或更细)。
部分符合:仅做到库级授权。
不符合:仅为全局(
*.*)授权。证据留存:
mysql.tables_priv、mysql.columns_priv查询结果截图、授权粒度说明。
九、测评项 g:应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问
MySQL 自身不具备安全标记能力,需依靠操作系统或第三方软件实现。
- 判定标准:由应用层或第三方实现了安全标记与访问控制判部分符合并说明边界; 无实现判不符合(三级系统该项通常不符合)。
- 证据留存:安全标记实现说明或不适用的对象边界说明、访谈纪要。
十、判定标准汇总
| 项 | 符合 | 部分符合 | 不符合 |
|---|---|---|---|
| a | 按岗建户、权限有差异、可对应自然人 | 多账户但划分粗糙 | 共用单一账户 |
| b | 已改名/删除,或保留但强口令且限 host | 保留且口令尚可但 host 为 % | 空口令/弱口令,或沿用初始口令 |
| c | 无多余、过期、共享账户 | 有长期未使用账户 | 有共享账户或离职人员仍可登录 |
| d | 最小权限且高危权限仅管理员持有 | 划分较粗或高危权限外授 | 全用同一高权限账户 |
| e | 有授权主体 + 审批过的策略且执行一致 | 有主体无书面策略 | 无授权主体,权限随意分配 |
| f | 客体粒度达表级或列级 | 仅库级 | 仅全局级 |
| g | 由应用层/第三方实现标记 | — | 无实现 |
参考依据
- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4 安全计算环境各控制点):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
- GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(测评对象边界认定、单元测评实施与结果判定:符合/部分符合/不符合/不适用):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
- GB/T 25070-2019《信息安全技术 网络安全等级保护安全设计技术要求》,可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
- GB/T 28449-2018《信息安全技术 网络安全等级保护测评过程指南》(现场测评活动与证据留存要求),可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
- MySQL 8.4 Reference Manual — Access Control and Account Management:https://dev.mysql.com/doc/refman/8.4/en/access-control.html
- Privileges Provided by MySQL:https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html
- Roles:https://dev.mysql.com/doc/refman/8.4/en/roles.html
- GRANT 语句:https://dev.mysql.com/doc/refman/8.4/en/grant.html
- 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准)——高风险情形判定口径,站内对照表:22、高风险判定指引与加固对照表
- 命令核验说明:本篇为控制点解读页,涉及的 MySQL 权限模型命令(
mysql.user、mysql.db、mysql.tables_priv、mysql.columns_priv、mysql.procs_priv、SHOW GRANTS、information_schema.user_privileges、mysql.role_edges)已对照 MySQL 官方 Reference Manual 的 Privilege Tables 与 Access Control 章节核验(核验日期 2026-09-02)。角色功能(mysql.role_edges)自 8.0 引入,5.6/5.7 无角色体系,权限分离须以角色或独立账户方式实现。安全标记(g 项)MySQL 无原生实现,须核查是否由操作系统强制访问控制或第三方数据标签系统承担,未实现时判不符合而非不适用。
关联文章
- 同板块·数据库测评篇:01、Oracle数据库测评、05、SQL Server数据库测评、37、MySQL数据库测评、28、MariaDB数据库测评、29、MongoDB测评、31、Redis数据库测评、30、达梦数据库测评、10、GaussDB(华为高斯数据库)测评、07、KingbaseES人大金仓数据库测评、06、优炫数据库(UXDB)测评
- 同板块·数据库命令速查:12、MySQL测评命令、25、PostgreSQL数据库配置核查命令、33、DB2数据库命令
- 同板块·中间件测评:02、TAS应用中间件测评、13、Linux(Tomcat)中间件命令
- 业务应用参照:21、应用系统访问控制测评解读、11、新员工网络培训考核系统测评
- 配套命令单:01、MySQL 测评命令单(数据库测评命令目录)
- 配套加固:12、MySQL数据库加固
- 板块目录:系统管理软件·平台
- 通用加固方案:17、加固方案总纲
- 取证记录模板:16、安全评估加固记录表3.0
- 高风险口径:22、高风险判定指引与加固对照表