内置角色

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

角色授予对定义的资源执行一组操作的权限。给定的角色适用于定义它的数据库,并且可以授予访问权限到粒度的集合级别。

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

MongoDB 提供了内置的数据库用户数据库管理每个数据库上的角色 。MongoDB 仅在数据库上提供所有其他内置角色 admin

本节介绍每个内置角色的权限。您还可以随时查看内置角色的权限,方法是发出 rolesInfoshowPrivilegesshowBuiltinRoles字段都设置为 的命令true

数据库用户角色

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

read

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

笔记:

从 MongoDB 4.2 开始,角色不再提供system.namespaces直接访问集合的权限。自 MongoDB 3.0 以来,不推荐直接访问集合。

在早期版本中,该角色提供了上述对system.namespaces集合的特权操作,从而允许直接访问。

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

如果用户没有listDatabases 权限操作,用户可以运行该listDatabases 命令以返回用户具有权限的数据库列表(包括用户对特定集合具有权限的数据库)如果该命令运行时未指定或 authorizedDatabases设置到true

readWrite

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

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

数据库管理角色

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

dbAdmin

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

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

资源:

dbOwner

数据库所有者可以对数据库执行任何管理操作。该角色结合了由readWrite, dbAdminuserAdmin角色。

userAdmin

提供在当前数据库上创建和修改角色和用户的能力。自从userAdmin角色允许用户将任何权限授予任何用户,包括他们自己,该角色还间接提供超级用户 访问数据库,或者,如果范围是admin 数据库,则访问集群。

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

警告:

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

集群管理角色

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

clusterAdmin

提供最大的集群管理访问。该角色结合了由clusterManager, clusterMonitor, 和hostManager角色。此外,角色提供dropDatabase操作。

clusterManager

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

资源

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

资源:

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

资源:

clusterMonitor

提供对监控工具的只读访问,例如MongoDB 云管理器运营经理监控代理。

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

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

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

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

资源:

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

资源

hostManager

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

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

Changed in version 4.4 :从 4.4 版本开始,hostManager不再提供cpuProfiler对集群的权限操作。

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

  • killCursors

备份和恢复角色

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

backup

提供备份数据所需的最低权限。此角色提供足够的权限来使用MongoDB 云管理器备份代理, 运营经理备份代理,或使用 mongodump备份整个mongod实例。

提供对 数据库中的集合和 数据库中的集合的insert操作。updatemms.backup``adminsettingsconfig

在 上anyResource,提供

在整个集群上,提供了

提供find以下操作:

提供对集合的insert操作。updateconfig.settings

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 运行--oplogReplay,创建 具有 on的用户定义角色anyActionanyResource仅授予必须运行的用户mongorestore--oplogReplay.

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

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

提供以下system.js收集操作:

在 上提供以下操作anyResource

config对和数据库上的所有非系统集合提供以下操作 local

提供以下操作admin.system.version

提供以下操作admin.system.roles

admin.system.users 提供对遗留集合的以下操作system.users

虽然,restore包括使用正常修改操作修改集合中文档的能力admin.system.users仅使用用户管理方法修改这些数据

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

笔记:

Aside

从 4.2 版开始,MongoDB 删除了 system.namespaces 集合。因此,restore角色不再提供访问这些集合的权限。自 MongoDB 3.0 以来,不推荐直接访问这些集合。

在早期版本中,restorerole 在集合上提供上述特权操作system.namespaces,从而允许直接访问集合。

全数据库角色

以下角色在admin数据库上可用,并提供适用于除local和 之外的所有数据库的特权config

readAnyDatabase

提供与readlocal在除和之外的所有数据库上config。该角色还提供 listDatabases对整个集群的操作。

另见clusterManagerclusterMonitor访问configlocal数据库的角色。

readWriteAnyDatabase

提供与以下相同的特权readWritelocal在除和之外的所有数据库上config。该角色还提供:

userAdminAnyDatabase

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

userAdminAnyDatabase还在集群上提供以下特权操作:

system.users该角色对数据库中的和 system.roles集合 admin以及system.users2.6 之前的 MongoDB 版本的遗留集合提供以下特权操作 :

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

另见clusterManagerclusterMonitor访问configlocal数据库的角色。

dbAdminAnyDatabase

提供与以下相同的特权dbAdminlocal在除和之外的所有数据库上config。该角色还提供listDatabases对整个集群的操作。

另见clusterManagerclusterMonitor访问configlocal数据库的角色。

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

超级用户角色

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

以下角色提供了为任何用户分配对任何数据库的任何权限的能力,这意味着具有这些角色之一的用户可以为 自己分配对任何数据库的任何权限:

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

root

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

还提供validatesystem.集合的特权操作。

在6.0版中更改:角色root包括数据库 中集合的find权限 。removesystem.preimages``config

内部角色

__system

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

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

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

译者:韩鹏帅

原文:Built-In Roles

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""