Docs 菜单

Docs 主页开发应用程序MongoDB Manual

内置角色

在此页面上

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

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

角色授予在定义的资源上执行一系列动作的特权。给定角色适用于定义它的数据库,并且可以授予集合粒度级别的访问权限。

MongoDB 的每个内置角色都为该角色的数据库中的所有系统集合在数据库级别定义访问权限,并为所有系统集合在集合级别定义访问权限。

本节描述了每个内置角色的特权。您还可以随时发出 rolesInfo 命令(将 showPrivilegesshowBuiltinRoles 字段设置为true),以查看内置角色的特权。

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

  • MongoDB Atlas 内置角色

  • 自托管部署内置角色

可以为 MongoDB Atlas 中托管的部署分配以下内置数据库用户角色:

MongoDB 角色
MongoDB Atlas 用户界面中的角色名称
继承的角色或特权动作
atlasAdmin
Atlas admin
readWriteAnyDatabase
Read and write to any database
readAnyDatabase
Only read any database

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

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

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

read

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

注意

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

该角色通过批准以下动作来提供读取访问权限:

如果用户没有 listDatabases 特权操作,则用户可运行 listDatabases 命令以返回该用户拥有特权的数据库列表(包括用户对特定集合具有特权的数据库),前提是该命令未指定 authorizedDatabases 选项或该选项设置为 true

readWrite

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

该角色对这些集合执行以下动作的权限:

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

dbAdmin

提供执行管理任务的能力,例如架构相关任务、索引和收集统计信息。该角色不授予用户和角色管理特权。

具体而言,该角色提供以下特权:

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

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

userAdmin

提供在当前数据库上创建和修改角色和用户的功能。由于userAdmin角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供对数据库的超级用户访问权限,或者对集群(如果范围为admin数据库)的访问权限。

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

警告

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

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

clusterAdmin

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

clusterManager

提供对集群的管理和监视动作。具有此角色的用户可以访问 configlocal 数据库,这两个数据库分别用于分片和复制。

资源
操作
所有 数据库

config 数据库中,允许以下动作:

资源
操作
config 数据库中的所有非系统集合

local 数据库中,允许以下动作:

clusterMonitor

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

允许对整个集群执行以下动作:

允许对集群中的所有数据库执行以下动作:

允许对集群中的所有 system.profile 集合执行 find 动作。

config 数据库中,允许以下动作:

local 数据库中,允许以下动作:

hostManager

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

对于整个集群,提供执行以下动作的权限:

针对集群中的所有数据库,提供执行以下动作的权限:

admin 数据库包括用于备份和恢复数据的以下角色:

backup

提供备份数据所需的最低权限。此角色提供足够的特权来使用MongoDB Cloud Manager备份代理、 Ops Manager备份代理,或使用mongodump备份整个mongod实例。

提供针对 config 数据库中 settings 集合的 insertupdate 动作。

anyResource 上,提供

在整个集群上,提供

针对以下内容提供执行 find 动作的权限:

提供在 config.settings 集合上进行 insertupdate 动作的权限。

backup角色提供额外特权来备份运行system.profile 数据库分析 时存在的 集合。

restore

针对非系统集合,提供 convertToCapped 权限。

如果 数据不包括 集合数据并且您在没有system.profile 选项的情况下运行mongorestore --oplogReplay,则提供从备份恢复数据所需的特权。

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

system.profile

如果备份数据包括system.profile 集合数据,而目标数据库不包含system.profile 集合,则mongorestore system.profile会尝试创建该集合,即使程序实际上并不恢复 文档。因此,用户需要额外的特权才能对数据库的 集合执行createCollectionconvertToCapped system.profile和 操作。

内置角色dbAdmindbAdminAnyDatabase都提供其他特权。

--oplogReplay

要使用 运行,请创建一个在--oplogReplayanyResource 上具有 anyAction 用户定义角色 。

仅授予必须使用 运行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操作。

另请参阅clusterManagerclusterMonitor角色以了解对configlocal数据库的访问权限。

readWriteAnyDatabase

在除localconfig之外的所有数据库上提供与readWrite相同的权限。该角色还提供:

另请参阅clusterManagerclusterMonitor角色以了解对configlocal数据库的访问权限。

userAdminAnyDatabase

在除localconfig之外的所有数据库上提供与userAdmin相同的用户管理操作访问权限。

userAdminAnyDatabase 此外,还对集群提供执行以下动作的特权:

该角色对 admin 数据库上的 system.userssystem.roles 集合以及 2.6 之前 MongoDB 版本中的旧版 system.users 集合提供以下特权动作:

userAdminAnyDatabase角色不限制用户可以授予的权限。因此, userAdminAnyDatabase用户可以授予自己超过当前权限的权限,甚至可以授予自己所有权限,即使该角色没有显式授予用户管理之外的权限。此角色实际上是 MongoDB 系统超级用户。

另请参阅clusterManagerclusterMonitor角色以了解对configlocal数据库的访问权限。

dbAdminAnyDatabase

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

另请参阅clusterManagerclusterMonitor角色以了解对configlocal数据库的访问权限。

从 MongoDB 5开始。 0 、 dbAdminAnyDatabase包括applyOps特权操作。

多个角色提供间接或直接的系统级超级用户访问权限。

以下角色能够为任何用户分配任何数据库的任何特权,这意味着具有这些角色的用户可以为自己分配任何数据库的任何特权:

以下角色提供对所有资源的完全特权:

root

提供对以下角色总共的操作和所有资源的访问权限:

还提供对 system. 集合执行 validate 动作的特权。

在 6.0 版本中更改root 角色包括对 config 数据库中 system.preimages 集合的 find remove 特权。

__system

MongoDB 将此角色分配给表示集群节点的用户对象,例如副本集节点和 mongos 实例。此角色授权其持有者对数据库中的任何对象执行任何动作的权限。

除特殊情况外,请勿将此角色分配给代表应用程序或人类管理员的用户对象。

如果您需要访问所有资源上的所有动作,例如运行 applyOps 命令,请勿分配此角色。您可以创建一个用户定义的角色,借此授予对 anyResource 执行 anyAction 的权限,并确保只有需要访问这些操作的用户才有此访问权限。

← 基于角色的访问控制