文档菜单
文档首页
/
MongoDB 手册
/ / /

createRole

在本页

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 所需访问权限
  • 示例
createRole

创建一个角色并指定其权限。该角色适用于运行命令的数据库。如果数据库中已存在该角色,则createRole 命令将返回一个 重复的角色 错误。

提示

mongosh 中,此命令也可以通过 db.createRole() 辅助方法执行.

辅助方法对 mongosh 用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。

此命令在以下环境中托管的部署中可用

  • MongoDB Atlas:云中MongoDB部署的全托管服务

重要

此命令在M0、M2、M5和M10+集群中不受支持。有关更多信息,请参阅不受支持的命令。

该命令具有以下语法

db.adminCommand(
{
createRole: "<new role>",
privileges: [
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
],
writeConcern: <write concern document>,
comment: <any>
}
)

createRole 命令具有以下字段

字段
类型
描述
createRole
字符串
新角色的名称。
权限
数组

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

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

角色
数组

一个数组,表示从该角色继承权限的角色。

必须包含 roles 字段。使用空数组来指定 从任何角色继承权限。

身份验证限制
数组

可选。

服务器对角色施加的身份验证限制。指定一组IP地址和CIDR 范围,允许拥有此角色的用户连接到,以及/或他们可以从这些地址连接。

写入关注
文档

可选。操作写入关注的级别。参见 写入关注规范。

注释
任何

可选。用户提供的注释,附加到此命令。一旦设置,此注释将出现在以下位置的此命令记录旁边

注释可以是任何有效的 BSON类型(字符串、整数、对象、数组等)。

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

要指定在 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身份验证的更多信息,请参阅自管理部署的身份验证。

角色的权限应用于创建角色的数据库。角色可以从其数据库中的其他角色继承权限。在 admin 数据库中创建的角色可以包含应用于所有数据库或集群的权限,并且可以从其他数据库中的角色继承权限。

要在数据库中创建角色,您必须具备

内置角色 userAdminuserAdminAnyDatabase 在其各自的 资源 上提供 createRolegrantRole 操作。

要创建具有指定 authenticationRestrictions 的角色,您必须在创建角色的 数据库资源 上具有 setAuthenticationRestriction 操作

以下 createRole 命令在 admin 数据库上创建名为 myClusterwideAdmin 的角色

db.adminCommand({ createRole: "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" }
],
writeConcern: { w: "majority" , wtimeout: 5000 }
})

返回

角色管理