Docs 主页 → 开发应用程序 → MongoDB Manual
内置角色
MongoDB 通过基于角色的授权授予对数据和命令的访问权限,并借助内置角色,提供数据库系统中常见的不同访问级别。您还可以创建用户定义角色。
角色授予在定义的资源上执行一系列动作的特权。给定角色适用于定义它的数据库,并且可以授予集合粒度级别的访问权限。
MongoDB 的每个内置角色都为该角色的数据库中的所有非系统集合在数据库级别定义访问权限,并为所有系统集合在集合级别定义访问权限。
本节描述了每个内置角色的特权。您还可以随时发出 rolesInfo
命令(将 showPrivileges
和 showBuiltinRoles
字段设置为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
。
数据库管理角色
每个数据库都包含以下数据库管理角色:
dbAdmin
提供执行管理任务的能力,例如架构相关任务、索引和收集统计信息。该角色不授予用户和角色管理特权。
具体而言,该角色提供以下特权:
资源允许的动作所有非系统集合(即数据库资源)
userAdmin
提供在当前数据库上创建和修改角色和用户的功能。由于
userAdmin
角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供对数据库的超级用户访问权限,或者对集群(如果范围为admin
数据库)的访问权限。userAdmin
角色明确提供以下操作:警告
了解授予
userAdmin
角色的安全隐患非常重要:拥有该数据库角色的用户可以为自己分配该数据库的任何特权。在admin
数据库上授予userAdmin
角色会产生进一步的安全隐患,因为这会间接提供对集群的超级用户访问权限。对于admin
范围,具有userAdmin
角色的用户可以授予集群范围的角色或权限,包括userAdminAnyDatabase
。
集群管理角色
admin
数据库包括以下角色,用于管理整个系统而不仅仅是单个数据库。这些角色包括但不限于副本集和分片集群管理功能。
clusterAdmin
提供最大的集群管理访问权限。该角色结合了
clusterManager
、clusterMonitor
和hostManager
角色授予的特权。此外,该角色还提供dropDatabase
操作。
clusterManager
提供对集群的管理和监视动作。具有此角色的用户可以访问
config
和local
数据库,这两个数据库分别用于分片和复制。资源操作所有 数据库在
config
数据库中,允许以下动作:在
local
数据库中,允许以下动作:
clusterMonitor
提供对监控工具(例如 MongoDB Cloud Manager 和 Ops Manager监控代理)的只读访问权限。
允许对整个集群执行以下动作:
允许对集群中的所有数据库执行以下动作:
允许对集群中的所有
system.profile
集合执行find
动作。在
config
数据库中,允许以下动作:在
local
数据库中,允许以下动作:
备份和恢复角色
admin
数据库包括用于备份和恢复数据的以下角色:
backup
提供备份数据所需的最低权限。此角色提供足够的特权来使用MongoDB Cloud Manager备份代理、 Ops Manager备份代理,或使用
mongodump
备份整个mongod
实例。提供针对
config
数据库中settings
集合的insert
和update
动作。在
anyResource
上,提供在整个集群上,提供
setUserWriteBlockMode
(从 MongoDB 6.0 开始)
针对以下内容提供执行
find
动作的权限:集群中的所有非系统集合,包括
config
和local
数据库中的集合集群中的以下系统集合:
来自 2.6 之前版本 MongoDB 的旧版
system.users
集合
提供在
config.settings
集合上进行insert
和update
动作的权限。backup
角色提供额外特权来备份运行system.profile
数据库分析 时存在的 集合。
restore
针对非系统集合,提供
convertToCapped
权限。如果 数据不包括 集合数据并且您在没有
system.profile
选项的情况下运行mongorestore
--oplogReplay
,则提供从备份恢复数据所需的特权。如果备份数据包含
system.profile
集合数据或者您使用--oplogReplay
运行,则需要额外权限:system.profile
如果备份数据包括
system.profile
集合数据,而目标数据库不包含system.profile
集合,则mongorestore
system.profile
会尝试创建该集合,即使程序实际上并不恢复 文档。因此,用户需要额外的特权才能对数据库的 集合执行createCollection
convertToCapped
system.profile
和 操作。内置角色
dbAdmin
和dbAdminAnyDatabase
都提供其他特权。--oplogReplay
要使用 运行,请创建一个在
--oplogReplay
anyResource
上具有anyAction
的 用户定义角色 。仅授予必须使用 运行
mongorestore
--oplogReplay
的用户。提供在整个集群上进行如下动作的权限:
提供在所有非系统集合上进行如下动作的权限:
在
system.js
集合上提供以下动作权限:提供在
anyResource
上执行以下动作的权限:针对
config
和local
数据库上的所有非系统集合,提供执行以下动作的权限:提供执行以下动作的权限
admin.system.version
提供执行以下动作的权限
admin.system.roles
针对
admin.system.users
和旧版system.users
集合提供执行以下动作的权限:尽管
restore
包含使用正常修改操作修改admin.system.users
集合中的文档的功能,但只能使用用户管理方法修改这些数据。提供对
<database>.system.views
集合执行以下操作:dropCollection
(从 MongoDB 6.0 开始)
在整个集群上,提供执行以下动作的权限:
bypassWriteBlockingMode
(从 MongoDB 6.0 开始)setUserWriteBlockMode
(从 MongoDB 6.0 开始)
全数据库角色
以下角色可用于 admin
数据库,并提供适用于除 local
和 config
之外的所有数据库的特权。
readAnyDatabase
对除
local
和config
之外的所有数据库提供与read
相同的只读权限。该角色还提供对整个集群的listDatabases
操作。另请参阅
clusterManager
和clusterMonitor
角色以了解对config
和local
数据库的访问权限。
readWriteAnyDatabase
在除
local
和config
之外的所有数据库上提供与readWrite
相同的权限。该角色还提供:针对整个集群的
listDatabases
动作权限
另请参阅
clusterManager
和clusterMonitor
角色以了解对config
和local
数据库的访问权限。
userAdminAnyDatabase
在除
local
和config
之外的所有数据库上提供与userAdmin
相同的用户管理操作访问权限。userAdminAnyDatabase
此外,还对集群提供执行以下动作的特权:该角色对
admin
数据库上的system.users
和system.roles
集合以及 2.6 之前 MongoDB 版本中的旧版system.users
集合提供以下特权动作:userAdminAnyDatabase
角色不限制用户可以授予的权限。因此,userAdminAnyDatabase
用户可以授予自己超过当前权限的权限,甚至可以授予自己所有权限,即使该角色没有显式授予用户管理之外的权限。此角色实际上是 MongoDB 系统超级用户。另请参阅
clusterManager
和clusterMonitor
角色以了解对config
和local
数据库的访问权限。
dbAdminAnyDatabase
在除
local
和config
之外的所有数据库上提供与dbAdmin
相同的权限。该角色还提供对整个集群的listDatabases
操作。另请参阅
clusterManager
和clusterMonitor
角色以了解对config
和local
数据库的访问权限。从 MongoDB 5开始。 0 、
dbAdminAnyDatabase
包括applyOps特权操作。
超级用户角色
多个角色提供间接或直接的系统级超级用户访问权限。
以下角色能够为任何用户分配任何数据库的任何特权,这意味着具有这些角色的用户可以为自己分配任何数据库的任何特权:
以下角色提供对所有资源的完全特权:
root
提供对以下角色总共的操作和所有资源的访问权限:
还提供对
system.
集合执行validate
动作的特权。
内部角色
__system
MongoDB 将此角色分配给表示集群节点的用户对象,例如副本集节点和
mongos
实例。此角色授权其持有者对数据库中的任何对象执行任何动作的权限。除特殊情况外,请勿将此角色分配给代表应用程序或人类管理员的用户对象。
如果您需要访问所有资源上的所有动作,例如运行
applyOps
命令,请勿分配此角色。您可以创建一个用户定义的角色,借此授予对anyResource
执行anyAction
的权限,并确保只有需要访问这些操作的用户才有此访问权限。