一、操作场景
·库表级权限隔离:当业务对同一数据库下不同集合(Collection)有独立读写隔离需求时(如订单库下 order_main 仅读、order_log 可写),通过自定义角色精确限定到目标集合,避免使用 readWrite 等粗粒度角色导致越权。
·命令级权限管控:当业务仅需账号执行特定操作(如仅 find、insert,不允许 drop、update)时,通过自定义角色组合具体 Action,将权限范围严格收敛到业务实际需要的命令集。
·复用与继承授权模板:将通用授权组合(如"运营查询角色"包含多个常用查询库的只读权限)封装为自定义角色,新账号直接绑定该角色,避免重复配置,并在角色权限调整时同步更新所有绑定账号。
·存量内核角色管理:通过 mongo shell 或驱动直接在 MongoDB 内核中创建的自定义角色,可在控制台统一查看和管理,便于迁移上云后的角色资产盘点。
二、功能说明
角色管理模块提供角色查看、自定义角色全生命周期管理两类能力:
·角色查看:在角色列表中集中展示所有内置角色和自定义角色,包含角色名、类别、授权范围等信息。
·创建自定义角色:基于全局角色、数据库角色、自定义角色继承,以及全局 Action、数据库 Action、集合 Action 六种权限来源,组合生成一个新的自定义角色。
·修改自定义角色:调整自定义角色已配置的权限项,修改后对所有绑定该角色的账号同步生效。
·删除自定义角色:清理不再使用的自定义角色,释放角色名空间。
注意:说明:
注意:MongoDB RBAC 权限模型由 User(账号)、Role(角色)、Privilege(权限)、Resource(资源)四要素构成。其中 Privilege = Action(操作命令) + Resource(资源范围)。角色管理操作的对象是 Role,账号与角色的绑定操作在 创建账号 或修改账号权限时完成。
三、使用须知
·创建、修改、删除角色后,系统需要2分钟进行后台配置才能生效,请稍作等待后再使用相关账号连接数据库。
·控制台创建的自定义角色默认存储在 admin 库;通过 mongo shell 或驱动直接在非 admin 库创建的自定义角色也支持在角色列表中展示和管理。
·内置角色由 MongoDB 提供,仅支持查看,不支持修改和删除。
·修改自定义角色的权限会同步影响所有绑定该角色的账号,建议修改前先确认账号清单和业务影响范围。
四、前提条件
·云数据库 MongoDB 副本集实例或分片实例的状态为运行中。
·已规划好自定义角色的授权范围,明确需要覆盖的数据库、集合或操作命令。
·如需通过"自定义角色继承"组合多个已有角色,需提前确认被继承角色的权限范围。
五、角色类别说明
在创建账号或创建自定义角色时,可选的角色分为三大类别:数据库角色、全局角色、自定义角色。三类角色的资源约束和可选范围如下表所示。
| 角色类别 | 作用范围 | 适用场景 |
| 数据库角色 | 单个数据库下的全部集合 | 单库读写、单库管理 |
| 全局角色 | 实例内全部数据库或整个集群 | 跨库读写、集群管理、备份恢复 |
| 自定义角色 | 由角色定义决定,可精确到集合和 Action | 库表级精细授权、命令级权限管控 |
六、数据库角色
数据库角色作用于单个数据库,常用于普通业务账号的读写授权。
| 角色名 | 功能含义 | 典型使用场景 |
| read | 在指定数据库内执行查询操作,可读取所有非系统集合的数据。 | 业务只读账号、报表查询账号、运营数据查询账号。 |
| readWrite | 在指定数据库内执行读写操作,包含查询、插入、更新、删除以及集合管理。 | 业务读写账号,是最常用的应用接入角色。 |
| dbOwner | 在指定数据库内拥有最高权限,包含 readWrite 的全部能力,并可进行用户管理和数据库管理操作。 | 单库管理员、独立业务线 DBA。 |
| userAdmin | 在指定数据库内管理账号和角色(创建、修改、删除),但不具备数据读写能力。 | 数据库权限管理员,与数据使用人员职责分离。 |
| dbAdmin | 在指定数据库内执行管理操作,如创建索引、查看统计信息、修改集合结构,但不具备数据读写权限。 | 性能优化人员、DBA 运维账号。 |
七、全局角色
全局角色作用于实例内的所有数据库或整个集群,按授权强度从低到高分为四个组,可根据业务场景选择最合适的组。
八、第一组:跨库读写和管理
| 角色名 | 功能含义 | 典型使用场景 |
| readAnyDatabase | 对实例内所有数据库具有读权限,等同于在每个数据库都绑定 read 角色。 | 全局只读账号、跨库报表分析账号。 |
| readWriteAnyDatabase | 对实例内所有数据库具有读写权限,等同于在每个数据库都绑定 readWrite 角色。 | 跨多库的业务账号、数据迁移账号。 |
| userAdminAnyDatabase | 对实例内所有数据库具有账号和角色管理权限,但不具备数据读写能力。 | 全局权限管理员。 |
| dbAdminAnyDatabase | 对实例内所有数据库具有管理操作权限(索引、统计、集合结构),但不具备数据读写能力。 | 全局 DBA 运维账号。 |
九、第二组:超高权限角色(请谨慎授予)
注意:超高权限角色(root、__system)可对实例进行任意操作,建议仅在应急运维、迁移等特定场景下短期授予,不建议长期分配给业务账号。directShardOperations 绕过了 mongos 的统一路由,误用可能导致集群无法正常工作甚至数据损坏,请仅在腾讯云技术支持指导下使用。
| 角色名 | 功能含义 | 典型使用场景 |
| root | 拥有实例几乎所有的内置角色权限,可对实例进行任意操作。 | 应急运维、故障处理。不建议长期分配给业务账号。 |
| __system | MongoDB 内部专用角色,可对集群内任意对象执行任意操作。 | 仅供 MongoDB 内部系统调用。不建议授予任何用户账号。 |
十、第三组:集群管理类
注意:directShardOperations 绕过了 mongos 的统一路由,误用可能导致集群无法正常工作甚至数据损坏,请仅在腾讯云技术支持指导下使用。
| 角色名 | 功能含义 | 典型使用场景 |
| clusterManager | 在集群上执行管理和监控操作(如配置分片、添加节点),不包含数据访问权限。 | 集群运维账号。 |
| clusterAdmin | 集群最高管理权限,组合 clusterManager、clusterMonitor、hostManager 三个角色的全部能力。 | 集群级管理员。 |
| clusterMonitor | 对集群进行只读监控访问,可查看集群运行状态、节点信息、慢日志等。 | 监控采集账号、巡检账号。 |
| hostManager | 对集群中的服务器进行运维操作(如关闭节点、刷新配置)。 | 集群运维账号。 |
| directShardOperations | 允许直接连接分片节点执行运维命令(仅 MongoDB 8.0及以上版本支持)。 | 仅在维护操作或腾讯云技术支持指导下使用。误用可能导致集群异常或数据损坏。 |
| enableSharding | 允许对数据库启用分片以及对集合进行分片操作。 | 分片集群初始化账号。 |
| searchCoordinator | 协调 Atlas Search 等搜索类工作负载所需的集群权限。 | Atlas Search 场景的运维账号。 |
十一、第四组:备份恢复类
| 角色名 | 功能含义 | 典型使用场景 |
| backup | 提供使用备份工具(如 mongodump)对实例进行全量备份所需的最小权限集。 | 备份工具账号。 |
| restore | 提供使用恢复工具(如 mongorestore)将备份数据恢复到实例所需的权限集。 | 恢复工具账号。 |
十三、步骤一:进入角色管理页面
1. 登录 MongoDB 控制台。
2. 在左侧导航栏 MongoDB 的下拉列表中,选择副本集实例或分片实例(两者操作类似)。
3. 在右侧实例列表页面上方,选择地域。
4. 在实例列表中,找到目标实例。
5. 单击目标实例 ID,进入实例详情页面。
6. 选择数据库管理页签,单击角色管理,进入角色列表页面。
十四、步骤二:查看角色列表
在角色列表页面,集中展示当前实例的全部内置角色和自定义角色。列表字段说明如下表。
| 字段名称 | 字段说明 |
| 角色名 | 角色的唯一标识。内置角色名为 MongoDB 标准角色名(如 readWrite)。自定义角色名为创建时设定的名称。 |
| 角色类别 | 取值为数据库角色、全局角色、自定义角色三类。 |
| 所属数据库 | 角色所属的数据库名称。对于全局角色和部分特定内置角色,通常归属于 admin 数据库。 |
| 授权角色和命令 | 仅自定义角色展示该字段,列出该角色继承的角色清单和直接配置的 Action 清单。内置角色该字段为‘–’。 |
| 操作 | 自定义角色支持修改、删除操作;内置角色仅支持查看操作。 |
注意:说明:
注意:列表的默认排序规则如下:
十五、步骤三:创建自定义角色
在角色列表页面,单击新建角色,在新建角色窗口完成以下配置后单击确定,即可完成创建。等待 2 分钟系统配置生效后,可在创建账号或修改账号权限时选择该自定义角色。
1. 角色名:在输入框,设置自定义角色的名称。角色创建后不支持修改。
·字符长度为1 – 32;
·仅支持字母(A – Z、a – z)、数字(0 – 9)、下划线(_)、短划线(-)。例如 audit_readonly。
注意:自定义角色名在同一实例内必须唯一,且不能与 MongoDB 内置角色名重复。
2. 权限配置:自定义角色的权限来自以下六种来源,可单选或组合使用。
·单击添加一条,可为同一角色叠加多种权限来源的授权记录。
·在选择数据库角色与数据库操作时,可以在选择 Database 下拉框单击创建,直接预设新数据库的授权记录,新建项排在列表第 1 位。
·在选择 collection 操作时,可以在选择 Database 与 选择 Collection 下拉框分别单击创建,直接预设新数据库与集合的授权记录,新建项排在列表第1位。
注意:说明:
注意:此处的"新建数据库"和"新建集合"仅在控制台预设授权记录,并不会立即在 MongoDB 中创建物理资源。物理资源会在首次写入数据时由 MongoDB 自动创建。
| 权限来源 | 说明 | 与账号直接绑定角色的差异 |
| 全局角色 | 继承一个或多个系统预设的全局角色权限,其权限效力作用于实例下的所有数据库。 | 与账号直接绑定角色的行为一致。具体信息,请参见 创建账号。 |
| 全局操作 | 按操作命令(Action)粒度授予全局维度的管理权限(如 listDatabases、shutdown)。 | 账号直接绑定角色时不支持此粒度。 |
| 数据库角色 | 继承一个或多个特定数据库的角色权限,其权限效力作用于指定的数据库。 | 与账号直接绑定角色的行为一致。具体信息,请参见 创建账号。 |
| 数据库操作 | 按操作命令(Action)粒度授予指定数据库维度的管理权限(如 listCollections、createCollection)。 | 账号直接绑定角色时不支持此粒度。 |
| collection 操作 | 按操作命令(Action)粒度授予指定数据库下特定集合(Collection)的数据操作权限(如 find、insert、update、remove)。 | 账号直接绑定角色时不支持此粒度。 |
| 自定义角色 | 继承一个或多个已存在的其他自定义角色权限,实现权限的层级嵌套与复用。说明:自定义角色继承不支持循环引用(如角色 A 继承 B,B 又继承 A),系统会在创建时进行校验拦截。 | 与账号直接绑定角色的行为一致。具体信息,请参见 创建账号。 |
十六、步骤四:修改自定义角色
在角色列表页面,找到目标自定义角色,单击操作列的编辑,在修改角色窗口调整权限项。修改流程与创建自定义角色一致,修改完成后单击确定保存。
·不可修改项:角色名一旦创建即不可变更。如需变更角色名,请删除原角色后重新创建。
·可修改项:可对其六类权限来源(全局角色、全局操作、数据库角色、数据库操作、集合操作、自定义角色)的绑定关系与具体规则进行编辑与更新。
注意:说明:
注意:修改或删除角色后,建议在2 – 5分钟内通过该角色绑定的账号执行一次连接和操作验证,确认权限调整符合预期。
十七、步骤五:删除自定义角色
在角色列表页面,找到目标自定义角色,单击操作列的删除,在弹出的删除角色窗口确认操作。
注意:说明:
注意:内置角色属于系统预设,不支持删除。 自定义角色删除后无法恢复,请务必谨慎操作。在删除自定义角色前,建议对该角色的权限配置进行备份。你可以通过“权限预览”功能,复制对应的 MongoDB 命令行作为配置备份。
十八、相关 API
| API 接口名称 | 描述 |
| DescribeInstanceRoles | 查询当前实例的角色列表 |
| CreateInstanceRole | 创建自定义角色 |
| UpdateInstanceRole | 修改自定义角色 |
| DeleteInstanceRole | 删除自定义角色 |
20、内置角色和自定义角色有什么区别?
内置角色由 MongoDB 提供,覆盖通用授权场景(如 read、readWrite),用户仅可查看和使用,不能修改或删除其权限定义。自定义角色由用户根据业务需要创建,支持组合多种权限来源(全局角色 / 数据库角色 / Action / 已有自定义角色),并可精确到数据库、集合和单个操作命令的粒度。当内置角色无法满足业务的精细授权需求时,建议使用自定义角色。
21、已绑定到账号的自定义角色被删除后,账号还能继续访问数据库吗?
不能。自定义角色被删除后,绑定该角色的账号将立即失去通过该角色获得的所有权限。建议在删除自定义角色前,先通过 账号管理 确认绑定关系并完成角色替换或解绑操作。
22、自定义角色支持继承其他自定义角色吗?
支持。在创建或修改自定义角色时,可在"自定义角色"权限来源中选择一个或多个已有的自定义角色。被继承的角色权限会合并到当前角色中。但系统不允许循环引用,即角色 A 不能继承一个已经直接或间接继承了 A 的角色。
23、通过 mongo shell 创建的自定义角色能在控制台修改吗?
可以。控制台会自动识别非 admin 库的自定义角色并展示在角色列表中,对应的修改、删除操作在控制台和内核之间保持数据一致。建议统一通过控制台进行角色管理,避免控制台与内核中同名角色的权限差异。
24、修改自定义角色的权限后多久生效?
系统需要2分钟完成后台配置才会生效。在此期间,绑定该角色的账号执行的操作仍以原权限为准。建议在业务低峰期进行权限修改,并在生效后通过一个测试账号验证调整结果。
25、相关文档
·查看账号列表
·创建账号
·开启 CAM 验证