文档数据库服务

角色管理

2025-07-01 08:47:54

预置角色

文档数据库服务提供了一些预置角色,这些角色具有特定的权限和功能,可以用于管理文档数据库服务实例或集群。以下是文档数据库服务中的预置角色:

角色

权限描述

包含的操作命令

read

该角色具有读取所有非系统集合数据和订阅部分系统集合(system.indexes、system.js、system.namespaces)的权限。

changeStream、collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections

readWrite

该角色基于read角色的权限,并额外增加了对非系统集合数据的修改权限。然而,该角色仅对系统集合中的system.js具有修改权限。

collStats、convertToCapped、createCollection、dbHash、dbStats、dropCollection、createIndex、dropIndex、find、insert、killCursors、listIndexes、listCollections、remove、renameCollectionSameDB、update

dbAdmin

该角色具备执行特定管理任务的权限,包括与模式相关的操作、索引管理和收集统计信息等。然而,该角色不包含对用户和角色进行管理的权限。

对于系统集合(system.indexes、system.namespaces、system.profile)包含命令操作:collStats、dbHash、dbStats、find、killCursors、listIndexes、listCollections、dropCollection and createCollection(仅适用system.profile)
对于非系统集合包含命令操作:bypassDocumentValidation、collMod、collStats、compact、convertToCapped、createCollection、createIndex、dbStats、dropCollection、dropDatabase、dropIndex、enableProfiler、reIndex、renameCollectionSameDB、repairDatabase、storageDetails、validate

userAdmin

该角色具有在当前数据库中创建和修改角色以及用户的权限。此角色允许向任何用户(包括自身)授予任意权限,因此间接提供对超级用户(root)的访问权限。如果限定在admin数据库中,该角色还包括集群管理权限。

changeCustomData、changePassword、createRole、createUser、dropRole、dropUser、grantRole、revokeRole、setAuthenticationRestriction、viewRole、viewUser

dbOwner

该角色是MongoDB中的一种数据库管理角色,授予了对指定数据库的完全权限。该角色具有管理指定数据库的能力,可以执行各种操作,如创建、修改和删除集合、索引和用户等。dbOwner角色拥有对指定数据库的所有权限,包括对数据库中任何集合、索引和用户的创建、修改和删除操作。

createCollection 、dropCollection、 createIndex 、dropIndex、createUser、updateUser、removeUser 、dropAllUsersFromDatabase、grantRolesToUser、revokeRolesFromUser 、dropAllRolesFromDatabase、viewRole 、viewUser、convertToCapped、collMod、dbStats

自定义角色

  • 本章节 管理角色 返回异常,但不一定是死链 

文档数据库服务支持用户自定义角色,可以根据需要创建和配置自己的角色,并根据这些角色为用户分配特定的权限和功能。自定义角色可以帮助管理员更好地管理文档数据库服务实例或集群,并提高安全性。 

创建自定义角色需要使用 createRole 命令或 db.createRole() 方法,并指定角色的名称、权限和其他属性,具体操作请参见管理角色。


管理角色

创建

创建自定义角色需要使用 createRole 命令或 db.createRole() 方法,并指定角色的名称、权限和其他属性。下面是创建角色的模板: db.createRole(role, writeConcern)。 

参数role为必选参数,类型为文档;参数writeConcern :用来指定命令的write concern的等级 。

db.createRole(
    {
      role: "<name>",
      privileges: [
         { resource: { <resource> }, actions: [ "<action>", ... ] },
         ...
      ],
      roles: [
         { role: "<role>", db: "<database>" } | "<role>",
          ...
      ],
      authenticationRestrictions: [
        {
          clientSource: ["<IP>" | "<CIDR range>", ...],
          serverAddress: ["<IP>" | "<CIDR range>", ...]
        },
        ...
      ]
    }
)

参数说明:

字段

类型

说明

role

string

角色名称。

privileges

数组

必选参数,数组元素表示角色所具备的权限。如果该参数设置为空集合,表示该角色没有任何权限。

resource

文档

该参数用于指定数据库名称或集合名称。

actions

数组

该参数对应的是资源可用的操作列表,其中常见的操作包括find、count、getMore、listDatabases、listCollections、listIndexes、insert、update、remove等。

roles

数组

必选参数,数组元素用于指定角色继承的角色名。这可以是系统预设的角色,例如read或readWrite,也可以是用户自定义的角色。

authenticationRestrictions

数组

该参数用于指定角色可以接受的IP地址或IP地址范围。

更新

在文档数据库服务中,可以使用 updateRole 命令或 db.updateRole() 方法来更新自定义角色的内容。更新自定义角色通常包括以下两个步骤: 

获取要更新的自定义角色的当前配置信息。 

可以使用 db.getRole() 命令或 db.runCommand({ getRole: "", rolesInfo: 1 }) 方法来获取要更新的自定义角色的当前配置信息。例如,下面的命令获取名为 myrole 的自定义角色的当前配置信息:

db.runCommand({ getRole: "myrole", rolesInfo: 1 })

更新自定义角色的配置信息

可以使用 updateRole 命令或 db.updateRole() 方法来更新自定义角色的配置信息。例如,下面的命令将名为 myrole 的自定义角色的权限更新为 read 权限:

db.updateRole("myrole", { privileges: [{ actions: ["read"], resource: { db: "", collection: "" } }] })

需要留意的是,更新自定义角色的配置信息需要谨慎操作,因为错误的操作可能会导致数据库的安全性问题。因此,在更新自定义角色之前,建议先备份数据库,并在测试环境中测试更新操作的效果。

删除

确认要删除自定义角色后,可以使用 dropRole 命令或 db.dropRole() 方法来删除自定义角色。例如,下面的命令删除名为 myrole 的自定义角色:

db.dropRole("myrole")

需要留意的是,删除自定义角色将导致该角色与所有用户的关联关系被删除。如果要删除自定义角色之前,请确保已经撤销了与该角色相关的所有用户的角色分配,并且已经备份了数据库。


DC86dXneejNf