自托管部署中的内置角色
MongoDB 通过基于角色的授权 提供数据和对命令的访问权限,并提供了提供数据库系统中常用不同级别访问权限的内置角色。您还可以创建 用户自定义角色。
角色授予在定义的 动作 上执行的一组 资源 的权限。给定的角色应用于其上定义的数据库,并可以授予向下到集合级别的访问权限。
系统集合 包括在
<database>.system.*命名空间中的那些local.replset.*复制集命名空间
有关详细信息,请参阅系统集合。
非系统集合 是那些不在上一列表中的命名空间。
MongoDB 的每个内置角色都定义了其数据库中所有 非 系统集合在数据库级别的访问权限,以及在所有系统集合上的集合级别的访问权限。
本节描述了每个内置角色的权限。您也可以通过使用将 showPrivileges 和 showBuiltinRoles 字段都设置为 true 的 rolesInfo 命令来随时查看内置角色的权限。
MongoDB Atlas 部署与自托管部署具有不同的内置角色。有关更多信息,请参阅以下资源
MongoDB Atlas 内置角色
有关在MongoDB Atlas中托管的部署的内置数据库用户角色,请参阅Altas 内置角色和权限。
您可以在MongoDB Atlas用户界面中创建数据库用户并分配内置角色。有关更多信息,请参阅添加数据库用户。
自托管部署内置角色
MongoDB 为自托管部署提供以下内置角色
数据库用户角色
每个数据库包含以下客户端角色
read提供在所有非系统集合以及
system.js集合上读取数据的能力。注意
该角色不提供直接访问
system.namespaces集合的权限。该角色通过授予以下操作提供读取访问权限:
如果用户没有
listDatabases权限操作,用户可以运行listDatabases命令来返回用户有权限的数据库列表(包括用户在特定集合上有权限的数据库),如果命令以未指定或设置为true的authorizedDatabases选项运行。
数据库管理角色
每个数据库都包含以下数据库管理角色
dbAdmin提供执行诸如模式相关任务、索引和收集统计信息等管理任务的能力。此角色不授予用户和角色管理的权限。
具体来说,此角色提供以下权限
资源允许的操作所有非系统集合(即数据库资源)
userAdmin允许在当前数据库上创建和修改角色和用户。由于
userAdmin角色允许用户将任何权限授予任何用户,包括自己,因此该角色也间接提供了对数据库或,如果作用域为admin数据库,则对集群的超级用户访问权限。userAdmin角色明确提供了以下操作警告
理解授予
userAdmin角色的安全影响非常重要:具有此角色数据库的用户可以为自己在该数据库上分配任何权限。在admin数据库上授予userAdmin角色具有进一步的安全影响,因为这间接提供了对集群的 超级用户 访问权限。具有admin范围的用户可以授予集群范围内的角色或权限,包括userAdminAnyDatabase。
集群管理角色
admin 数据库包括以下角色,用于管理系统而不是单个数据库。这些角色包括但不限于 副本集 和 分片集群 管理功能。
clusterAdmin提供最大的集群管理访问权限。此角色结合了由
clusterManager、clusterMonitor和hostManager角色授予的权限。此外,该角色还提供了dropDatabase操作。
clusterManager提供对集群的管理和监控操作。具有此角色的用户可以访问
config和local数据库,分别用于分片和复制。此外,该角色还提供querySettings操作。资源操作所有 数据库clusterManager为config和local数据库提供额外的权限。在
config数据库上,允许以下操作资源操作config数据库中所有非系统集合在
local数据库上,允许以下操作
clusterMonitor提供对监控工具的只读访问权限,例如 MongoDB Cloud Manager 和 Ops Manager 监控代理。
允许在集群整体上进行以下操作
允许在集群中所有数据库上进行以下操作
允许在集群中所有
find操作的所有system.profile集合上。在
config数据库上,允许以下操作资源操作config数据库中所有非系统集合system.js集合在
local数据库上,允许以下操作
directShardOperations从 MongoDB 8.0 版本开始,您可以使用
directShardOperations角色执行需要对分片直接执行命令的维护操作。警告
使用
directShardOperations角色运行命令可能导致您的集群无法正常工作,并可能引起数据损坏。仅当进行维护操作或在 MongoDB 支持的指导下时,才使用directShardOperations角色进行操作。完成维护操作后,请停止使用directShardOperations角色。
备份和恢复角色
管理员数据库包含以下备份和恢复数据角色:
backup提供备份数据所需的最小权限。此角色提供了使用 MongoDB Cloud Manager 备份代理、Ops Manager 备份代理或使用
mongodump备份整个mongod实例的充分权限。在
config数据库的settings集合上提供insert和update操作。在
anyResource上提供在整个 集群 上提供
setUserWriteBlockMode(自 MongoDB 6.0 开始)
在以下内容上提供
find操作:集群中所有非系统集合,包括
config和local数据库中的集合集群中的以下系统集合:
来自 MongoDB 2.6 之前版本的旧
system.users集合
在
config.settings集合上提供insert和update操作。backup角色提供了额外的权限,用于备份在运行 数据库分析 时存在的system.profile集合。
restore在非系统集合上提供
convertToCapped操作。如果备份数据不包含
system.profile集合数据,并且您在未使用--oplogReplay选项的情况下运行mongorestore,则提供从备份中恢复数据所需的权限。如果备份数据包含
system.profile集合数据或您使用--oplogReplay运行,则需要额外的权限。system.profile如果备份数据包含
system.profile集合数据,而目标数据库不包含该集合,则mongorestore会尝试创建该集合,尽管程序实际上并没有恢复system.profile文档。因此,用户需要额外的权限来在数据库的system.profile集合上执行createCollection和convertToCapped操作。内置角色
dbAdmin和dbAdminAnyDatabase提供了这些额外的权限。--oplogReplay要使用
--oplogReplay运行,创建一个具有对anyAction权限的用户定义角色,并且这些权限应用于anyResource。仅授予必须使用
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 7.2 开始使用)
在集群整体上,提供以下操作
bypassWriteBlockingMode(从 MongoDB 6.0 开始使用)setUserWriteBlockMode(自 MongoDB 6.0 开始)
所有数据库角色
以下角色可在 admin 数据库中找到,并提供了适用于除 local 和 config 之外所有数据库的权限
readAnyDatabase提供与在所有数据库(除了
local和config)上使用read相同的只读权限。该角色还提供了集群整体上的listDatabases操作。有关访问
config和local数据库的权限,请参阅clusterManager和clusterMonitor角色。
readWriteAnyDatabase该角色提供与
readWrite相同的权限,但除了本地数据库local和配置数据库config之外的所有数据库。该角色还提供对集群整体的
listDatabases操作compactStructuredEncryptionData操作
有关访问
config和local数据库的权限,请参阅clusterManager和clusterMonitor角色。
userAdminAnyDatabase提供与本地数据库和配置数据库之外所有数据库的
userAdmin相同的用户管理操作权限。userAdminAnyDatabase还提供以下集群上的权限操作该角色在
和system.users集合上,以及system.rolesadmin数据库上的旧版MongoDB 2.6之前的system.users集合上提供以下权限操作角色
userAdminAnyDatabase不限制用户可以授予的权限。因此,userAdminAnyDatabase用户可以授予自己超出当前权限的权限,甚至可以授予自己 所有权限,尽管该角色没有明确授权超出用户管理的权限。这个角色实际上是一个 MongoDB 系统的 超级用户。有关访问
config和local数据库的权限,请参阅clusterManager和clusterMonitor角色。
dbAdminAnyDatabase该角色提供与
dbAdmin相同的权限,但除了local和config数据库之外的所有数据库。此外,该角色还提供在集群整体上的listDatabases操作。有关访问
config和local数据库的权限,请参阅clusterManager和clusterMonitor角色。从 MongoDB 5.0 开始,
dbAdminAnyDatabase包括 applyOps 权限操作。
超级用户角色
一些角色提供间接或直接的全局超级用户访问权限。
以下角色提供在任意数据库上为任意用户分配任意权限的能力,这意味着拥有这些角色的用户可以在任意数据库上授予自己任意权限
以下角色提供了对所有资源的完全权限
root提供对以下角色的操作和所有资源的访问权限 合并
还提供以下权限操作
validate在system.集合。bypassDefaultMaxTimeMS,导致用户运行的所有查询都将忽略defaultMaxTimeMS的值。
内部角色
__systemMongoDB 将此角色分配给表示集群成员的用户对象,例如副本集成员和
mongos实例。此角色使持有者有权对数据库中的任何对象采取任何行动。不要 将此角色分配给表示应用程序或人类管理员的用户对象,除非在特殊情况之下。
如果您需要访问所有资源上的所有操作,例如运行
applyOps命令,不要分配此角色。相反,创建一个用户定义的角色,该角色授予在anyAction上的anyResource权限,并确保只有需要访问这些操作的用户提供此访问权限。