On this page本页内容
db.createRole(role, writeConcern)
Creates a role in a database. 在数据库中创建角色。You can specify privileges for the role by explicitly listing the privileges or by having the role inherit privileges from other roles or both. 您可以通过显式列出权限或让角色从其他角色继承权限或两者兼而有之来指定角色的权限。The role applies to the database on which you run the method.该角色适用于运行该方法的数据库。
The db.createRole()
method accepts the following arguments:db.createRole()
方法接受以下参数:
role | document | |
writeConcern | document |
|
The role
document has the following form:role
文档的格式如下:
{ role: "<name>", privileges: [ { resource: { <resource> }, actions: [ "<action>", ... ] }, ... ], roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ], authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>" | "<CIDR range>", ...] }, ... ] }
The role
document has the following fields:role
文档包含以下字段:
role | string | |
privileges | array |
|
roles | array |
|
authenticationRestrictions | array |
|
The db.createRole()
method wraps the createRole
command.db.createRole()
方法包装了createRole
命令。
In the 在roles
field, you can specify both built-in roles and user-defined roles.roles
字段中,可以指定内置角色和用户定义的角色。
To specify a role that exists in the same database where 要指定存在于运行db.createRole()
runs, you can either specify the role with the name of the role:db.createRole()
的同一数据库中的角色,可以使用角色名称指定该角色:
"readWrite"
Or you can specify the role with a document, as in:也可以使用文档指定角色,如:
{ role: "<role>", db: "<database>" }
To specify a role that exists in a different database, specify the role with a document.要指定存在于其他数据库中的角色,请使用文档指定该角色。
The authenticationRestrictions
document can contain only the following fields. authenticationRestrictions
文档只能包含以下字段。The server throws an error if the 如果authenticationRestrictions
document contains an unrecognized field:authenticationRestrictions
文档包含无法识别的字段,则服务器会引发错误:
Field Name | ||
---|---|---|
clientSource | ||
serverAddress |
If a user inherits multiple roles with incompatible authentication restrictions, that user becomes unusable.如果用户继承了具有不兼容身份验证限制的多个角色,则该用户将不可用。
For example, if a user inherits one role in which the 例如,如果一个用户继承了clientSource
field is ["198.51.100.0"]
and another role in which the clientSource
field is ["203.0.113.0"]
the server is unable to authenticate the user.clientSource
字段为["198.51.100.0"]
的一个角色和clientSource
字段为["203.0.113.0"]
的另一个角色,则服务器无法对该用户进行身份验证。
For more information on authentication in MongoDB, see Authentication.有关MongoDB中身份验证的更多信息,请参阅身份验证。
If run on a replica set, 如果在副本集上运行,默认情况下,db.createRole()
is executed using "majority"
write concern by default.db.createRole()
将使用"majority"
写入关注点执行。
Except for roles created in the 除了在admin
database, a role can only include privileges that apply to its database and can only inherit from other roles in its database.admin
数据库中创建的角色之外,角色只能包括应用于其数据库的权限,并且只能从其数据库中的其他角色继承。
A role created in the 在admin
database can include privileges that apply to the admin
database, other databases or to the cluster resource, and can inherit from roles in other databases as well as the admin
database.admin
数据库中创建的角色可以包括应用于admin
数据库、其他数据库或群集资源的权限,并且可以从其他数据库和admin
数据库中的角色继承。
The 如果数据库中已存在角色,则db.createRole()
method returns a duplicate role error if the role already exists in the database.db.createRole()
方法返回重复的角色错误。
To create a role in a database, you must have:要在数据库中创建角色,您必须具备:
createRole
action on that database resource.createRole
操作。grantRole
action on that database to specify privileges for the new role as well as to specify roles to inherit from.grantRole
操作,以指定新角色的权限以及指定要从中继承的角色。Built-in roles 内置角色userAdmin
and userAdminAnyDatabase
provide createRole
and grantRole
actions on their respective resources.userAdmin
和userAdminAnyDatabase
在各自的资源上提供createRole
和grantRole
操作。
To create a role with 要创建指定了authenticationRestrictions
specified, you must have the setAuthenticationRestriction
action on the database resource which the role is created.authenticationRestrictions
的角色,必须对创建角色的数据库资源执行setAuthenticationRestriction
操作。
The following 以下db.createRole()
method creates the myClusterwideAdmin
role on the admin
database: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 } )