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 setAuthenticationRestrictionaction 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 }
)