文档菜单
文档首页
/
MongoDB 手册
/ / /

自托管部署中的内置角色

本页内容

  • MongoDB Atlas 内置角色
  • 自托管部署内置角色
  • 数据库用户角色
  • 数据库管理角色
  • 集群管理角色
  • 备份和恢复角色
  • 所有数据库角色
  • 超级用户角色
  • 内部角色

MongoDB 通过基于角色的授权 提供数据和对命令的访问权限,并提供了提供数据库系统中常用不同级别访问权限的内置角色。您还可以创建 用户自定义角色

角色授予在定义的 动作 上执行的一组 资源 的权限。给定的角色应用于其上定义的数据库,并可以授予向下到集合级别的访问权限。

系统集合 包括在

  • <database>.system.* 命名空间中的那些

  • local.replset.* 复制集命名空间

有关详细信息,请参阅系统集合。

非系统集合 是那些不在上一列表中的命名空间。

MongoDB 的每个内置角色都定义了其数据库中所有 系统集合在数据库级别的访问权限,以及在所有系统集合上的集合级别的访问权限。

本节描述了每个内置角色的权限。您也可以通过使用将 showPrivilegesshowBuiltinRoles 字段都设置为 truerolesInfo 命令来随时查看内置角色的权限。

MongoDB Atlas 部署与自托管部署具有不同的内置角色。有关更多信息,请参阅以下资源

  • MongoDB Atlas 内置角色

  • 自托管部署内置角色

有关在MongoDB Atlas中托管的部署的内置数据库用户角色,请参阅Altas 内置角色和权限。

您可以在MongoDB Atlas用户界面中创建数据库用户并分配内置角色。有关更多信息,请参阅添加数据库用户。

MongoDB 为自托管部署提供以下内置角色

每个数据库包含以下客户端角色

read

提供在所有系统集合以及system.js集合上读取数据的能力。

注意

该角色不提供直接访问system.namespaces集合的权限。

该角色通过授予以下操作提供读取访问权限:

如果用户没有listDatabases权限操作,用户可以运行listDatabases命令来返回用户有权限的数据库列表(包括用户在特定集合上有权限的数据库),如果命令以未指定或设置为trueauthorizedDatabases选项运行。

readWrite

提供read角色的所有权限,以及修改所有系统集合和system.js集合数据的能力。

此角色对这些集合提供以下操作

每个数据库都包含以下数据库管理角色

dbAdmin

提供执行诸如模式相关任务、索引和收集统计信息等管理任务的能力。此角色不授予用户和角色管理的权限。

具体来说,此角色提供以下权限

资源
允许的操作
所有系统集合(即数据库资源
dbOwner

数据库所有者可以在数据库上执行任何管理操作。此角色结合了readWritedbAdminuserAdmin角色授予的权限。

userAdmin

允许在当前数据库上创建和修改角色和用户。由于userAdmin角色允许用户将任何权限授予任何用户,包括自己,因此该角色也间接提供了对数据库或,如果作用域为admin数据库,则对集群的超级用户访问权限。

userAdmin角色明确提供了以下操作

警告

理解授予 userAdmin 角色的安全影响非常重要:具有此角色数据库的用户可以为自己在该数据库上分配任何权限。在 admin 数据库上授予 userAdmin 角色具有进一步的安全影响,因为这间接提供了对集群的 超级用户 访问权限。具有 admin 范围的用户可以授予集群范围内的角色或权限,包括 userAdminAnyDatabase

admin 数据库包括以下角色,用于管理系统而不是单个数据库。这些角色包括但不限于 副本集分片集群 管理功能。

clusterAdmin

提供最大的集群管理访问权限。此角色结合了由 clusterManagerclusterMonitorhostManager 角色授予的权限。此外,该角色还提供了 dropDatabase 操作。

clusterManager

提供对集群的管理和监控操作。具有此角色的用户可以访问 configlocal 数据库,分别用于分片和复制。此外,该角色还提供 querySettings 操作。

config 数据库上,允许以下操作

local 数据库上,允许以下操作

clusterMonitor

提供对监控工具的只读访问权限,例如 MongoDB Cloud ManagerOps Manager 监控代理。

允许在集群整体上进行以下操作

允许在集群中所有数据库上进行以下操作

允许在集群中所有 find 操作的所有 system.profile 集合上。

config 数据库上,允许以下操作

local 数据库上,允许以下操作

directShardOperations

从 MongoDB 8.0 版本开始,您可以使用 directShardOperations 角色执行需要对分片直接执行命令的维护操作。

警告

使用 directShardOperations 角色运行命令可能导致您的集群无法正常工作,并可能引起数据损坏。仅当进行维护操作或在 MongoDB 支持的指导下时,才使用 directShardOperations 角色进行操作。完成维护操作后,请停止使用 directShardOperations 角色。

enableSharding

提供为集合启用分片和修改现有分片键的能力。

对所有非系统集合提供以下操作:

hostManager

提供监控和管理服务器的功能。

在整个集群上提供以下操作

在集群中的所有数据库上提供以下操作

管理员数据库包含以下备份和恢复数据角色:

backup

提供备份数据所需的最小权限。此角色提供了使用 MongoDB Cloud Manager 备份代理、Ops Manager 备份代理或使用 mongodump 备份整个 mongod 实例的充分权限。

config 数据库的 settings 集合上提供 insertupdate 操作。

anyResource 上提供

在整个 集群 上提供

在以下内容上提供 find 操作:

config.settings 集合上提供 insertupdate 操作。

backup 角色提供了额外的权限,用于备份在运行 数据库分析 时存在的 system.profile 集合。

restore

在非系统集合上提供 convertToCapped 操作。

如果备份数据不包含 system.profile 集合数据,并且您在未使用 --oplogReplay 选项的情况下运行 mongorestore,则提供从备份中恢复数据所需的权限。

如果备份数据包含 system.profile 集合数据或您使用 --oplogReplay 运行,则需要额外的权限。

system.profile

如果备份数据包含system.profile集合数据,而目标数据库不包含该集合,则mongorestore会尝试创建该集合,尽管程序实际上并没有恢复system.profile文档。因此,用户需要额外的权限来在数据库的system.profile集合上执行createCollectionconvertToCapped操作。

内置角色dbAdmindbAdminAnyDatabase提供了这些额外的权限。

--oplogReplay

要使用--oplogReplay运行,创建一个具有对anyAction权限的用户定义角色,并且这些权限应用于anyResource

仅授予必须使用mongorestore--oplogReplay的用户。

在整个集群上提供以下操作

在所有非系统集合上提供以下操作

system.js集合上提供以下操作

anyResource上提供以下操作:

configlocal数据库上的所有非系统集合提供以下操作

admin.system.version上提供以下操作

admin.system.roles上提供以下操作

admin.system.users和传统的system.users集合上提供以下操作

尽管restore包括使用常规修改操作修改admin.system.users集合文档的能力,但请仅使用用户管理方法修改这些数据。

<database>.system.views集合上提供以下操作

在集群整体上,提供以下操作

以下角色可在 admin 数据库中找到,并提供了适用于除 localconfig 之外所有数据库的权限

readAnyDatabase

提供与在所有数据库(除了 localconfig)上使用 read 相同的只读权限。该角色还提供了集群整体上的 listDatabases 操作。

有关访问 configlocal 数据库的权限,请参阅 clusterManagerclusterMonitor 角色。

readWriteAnyDatabase

该角色提供与readWrite相同的权限,但除了本地数据库local和配置数据库config之外的所有数据库。该角色还提供

  • 对集群整体的listDatabases操作

  • compactStructuredEncryptionData操作

有关访问 configlocal 数据库的权限,请参阅 clusterManagerclusterMonitor 角色。

userAdminAnyDatabase

提供与本地数据库和配置数据库之外所有数据库的userAdmin相同的用户管理操作权限。

userAdminAnyDatabase还提供以下集群上的权限操作

该角色在system.userssystem.roles集合上,以及admin数据库上的旧版MongoDB 2.6之前的system.users集合上提供以下权限操作

角色 userAdminAnyDatabase 不限制用户可以授予的权限。因此,userAdminAnyDatabase 用户可以授予自己超出当前权限的权限,甚至可以授予自己 所有权限,尽管该角色没有明确授权超出用户管理的权限。这个角色实际上是一个 MongoDB 系统的 超级用户。

有关访问 configlocal 数据库的权限,请参阅 clusterManagerclusterMonitor 角色。

dbAdminAnyDatabase

该角色提供与 dbAdmin 相同的权限,但除了 localconfig 数据库之外的所有数据库。此外,该角色还提供在集群整体上的 listDatabases 操作。

有关访问 configlocal 数据库的权限,请参阅 clusterManagerclusterMonitor 角色。

从 MongoDB 5.0 开始,dbAdminAnyDatabase 包括 applyOps 权限操作。

一些角色提供间接或直接的全局超级用户访问权限。

以下角色提供在任意数据库上为任意用户分配任意权限的能力,这意味着拥有这些角色的用户可以在任意数据库上授予自己任意权限

以下角色提供了对所有资源的完全权限

root

提供对以下角色的操作和所有资源的访问权限 合并

还提供以下权限操作

已更改版本6.0: root 角色包括在 config 数据库中 system.preimages 集合上的 findremove 权限。

__system

MongoDB 将此角色分配给表示集群成员的用户对象,例如副本集成员和 mongos 实例。此角色使持有者有权对数据库中的任何对象采取任何行动。

不要 将此角色分配给表示应用程序或人类管理员的用户对象,除非在特殊情况之下。

如果您需要访问所有资源上的所有操作,例如运行 applyOps 命令,不要分配此角色。相反,创建一个用户定义的角色,该角色授予在 anyAction 上的 anyResource 权限,并确保只有需要访问这些操作的用户提供此访问权限。

返回

基于角色的访问控制