db.createRole()
定义
db.createRole(role, writeConcern)
在数据库中创建角色。您可通过显式列出特权、让角色从其他角色继承权限或同时执行二者为角色指定特权。此角色会应用于运行该方法的数据库。
重要
mongosh 方法
本页面提供
mongosh
方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。有关数据库命令,请参阅
createRole
命令。如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
db.createRole()
方法接受以下参数: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 范围的列表。
角色
要指定运行 db.createRole()
的同一数据库中存在的角色,可以使用角色名称指定角色:
"readWrite"
或者,可以使用文档指定角色,如下所示:
{ role: "<role>", db: "<database>" }
要指定存在于其他数据库中的角色,请使用文档指定该角色。
authenticationRestrictions
authenticationRestrictions
文档只能包含以下字段。如果 authenticationRestrictions
文档包含无法识别的字段,服务器会引发错误:
字段名称 | 值 | 说明 |
---|---|---|
| IP 地址和/或 CIDR 范围的数组 | 如果存在,则在对用户进行身份验证时,服务器会验证客户端的 IP 地址是否在给定列表中或属于列表中的 CIDR 范围。如果客户端的 IP 地址不存在,服务器不会对用户进行身份验证。 |
| IP 地址和/或 CIDR 范围的数组 | 客户端可以连接的 IP 地址或 CIDR 范围列表。如果存在,服务器将验证客户端的连接是否已通过给定列表中的 IP 地址接受。如果通过无法识别的 IP 地址接受连接,服务器不会对用户进行身份验证。 |
重要
如果用户继承的多个角色具有不兼容的身份验证限制,则该用户将不可用。
例如,如果用户继承了一个角色(其中 clientSource
字段为 ["198.51.100.0"]
)和另一个角色(其中 clientSource
字段为 ["203.0.113.0"]
),则服务器无法对该用户进行身份验证。
有关MongoDB中身份身份验证的更多信息,请参阅自托管部署上的身份验证。
兼容性
此方法可用于以下环境中托管的部署:
重要
MongoDB Atlas集群不支持此命令。 有关Atlas支持所有命令的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
副本集
如果在副本集上运行,则默认情况下使用 "majority"
写关注执行 db.createRole()
。
范围
除在 admin
数据库中创建的角色之外,角色只能包含会应用于其数据库的特权,且只能从其数据库中的其他角色来继承。
在 admin
数据库中创建的角色可包含会应用于 admin
数据库、其他数据库或集群资源的特权,且可从其他数据库和 admin
数据库中的角色来继承。
如果角色已经存在于数据库中,则 db.createRole()
方法会返回重复角色错误。
必需的访问权限
要在数据库中创建角色,必须:
对该数据库资源执行
createRole
操作。
通过内置角色 userAdmin
和 userAdminAnyDatabase
,可在各自的资源上执行 createRole
和 grantRole
操作。
要在指定 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 } )