Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.createRole()

在此页面上

  • 定义
  • 兼容性
  • 行为
  • 必需的访问权限
  • 例子
db.createRole(role, writeConcern)

在数据库中创建角色。您可通过显式列出特权、让角色从其他角色继承权限或同时执行二者为角色指定特权。此角色会应用于运行该方法的数据库。

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。

有关数据库命令,请参阅 createRole 命令。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

db.createRole() 方法接受以下参数:

Parameter
类型
说明

role

文档

包含角色名称和角色定义的文档。

writeConcern

文档

可选。操作的写关注级别。请参阅写关注规范

role 文档采用以下形式:

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

role 文档包含以下字段:

字段
类型
说明

role

字符串

新角色的名称。

privileges

阵列

授予角色的权限。权限由资源和允许的操作组成。有关权限的语法,请参阅 privileges 数组。

必须包含 privileges 字段。使用空数组指定 权限。

roles

阵列

该角色所继承权限的源角色的数组。

必须包含 roles 字段。使用空数组指定没有 可从其继承权限的角色。

authenticationRestrictions

阵列

可选。

服务器对角色实施的身份验证限制。指定允许授予此角色的用户连接和/或可以从中进行连接的 IP 地址和 CIDR 范围的列表。

roles 字段中,可以指定内置角色用户自定义角色

要指定运行 db.createRole() 的同一数据库中存在的角色,可以使用角色名称指定角色:

"readWrite"

或者,可以使用文档指定角色,如下所示:

{ role: "<role>", db: "<database>" }

要指定存在于其他数据库中的角色,请使用文档指定该角色。

authenticationRestrictions 文档只能包含以下字段。如果 authenticationRestrictions 文档包含无法识别的字段,服务器会引发错误:

字段名称
说明

clientSource

IP 地址和/或 CIDR 范围的数组

如果存在,则在对用户进行身份验证时,服务器会验证客户端的 IP 地址是否在给定列表中或属于列表中的 CIDR 范围。如果客户端的 IP 地址不存在,服务器不会对用户进行身份验证。

serverAddress

IP 地址和/或 CIDR 范围的数组

客户端可以连接的 IP 地址或 CIDR 范围列表。如果存在,服务器将验证客户端的连接是否已通过给定列表中的 IP 地址接受。如果通过无法识别的 IP 地址接受连接,服务器不会对用户进行身份验证。

重要

如果用户继承的多个角色具有不兼容的身份验证限制,则该用户将不可用。

例如,如果用户继承了一个角色(其中 clientSource 字段为 ["198.51.100.0"])和另一个角色(其中 clientSource 字段为 ["203.0.113.0"]),则服务器无法对该用户进行身份验证。

有关MongoDB中身份身份验证的更多信息,请参阅自托管部署上的身份验证。

此方法可用于以下环境中托管的部署:

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

如果在副本集上运行,则默认情况下使用 "majority" 写关注执行 db.createRole()

除在 admin 数据库中创建的角色之外,角色只能包含会应用于其数据库的特权,且只能从其数据库中的其他角色来继承。

admin 数据库中创建的角色可包含会应用于 admin 数据库、其他数据库或集群资源的特权,且可从其他数据库和 admin 数据库中的角色来继承。

如果角色已经存在于数据库中,则 db.createRole() 方法会返回重复角色错误

要在数据库中创建角色,必须:

通过内置角色 userAdminuserAdminAnyDatabase,可在各自的资源上执行 createRolegrantRole 操作。

要在指定 authenticationRestrictions 时创建角色,必须针对创建该角色的数据库资源执行 setAuthenticationRestriction 操作

以下 db.createRole() 方法将对 admin 数据库创建 myClusterwideAdmin 角色:

use admin
db.createRole(
{
role: "myClusterwideAdmin",
privileges: [
{ resource: { cluster: true }, actions: [ "addShard" ] },
{ resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
{ resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
{ resource: { db: "", collection: "" }, actions: [ "find" ] }
],
roles: [
{ role: "read", db: "admin" }
]
},
{ w: "majority" , wtimeout: 5000 }
)

后退

角色管理