On this page
system.roles Collection
2.6 版的新功能。
在本页面
admin数据库中的system.roles集合存储用户定义的角色。为了创建和 Management 这些用户定义的角色,MongoDB 提供了角色 Management 命令。
system.roles Schema
system.roles集合中的文档具有以下架构:
{
_id: <system-defined id>,
role: "<role name>",
db: "<database>",
privileges:
[
{
resource: { <resource> },
actions: [ "<action>", ... ]
},
...
],
roles:
[
{ role: "<role name>", db: "<database>" },
...
]
}
system.roles文档具有以下字段:
admin.system.roles.role- role字段是一个字符串,用于指定角色的名称。
admin.system.roles.dbadmin.system.roles.privileges- privileges数组包含为角色定义privileges的特权文档。
特权文档具有以下语法:
{
resource: { <resource> },
actions: [ "<action>", ... ]
}
每个特权文档具有以下字段:
admin.system.roles.privileges[n].resource- 指定特权actions所应用的资源的文档。该文档具有以下格式之一:
{ db: <database>, collection: <collection> }
or
{ cluster : true }
有关更多详细信息,请参见Resource Document。
admin.system.roles.privileges[n].actions- 资源上允许的一系列操作。有关操作的列表,请参见Privilege Actions。
admin.system.roles.roles
角色文档具有以下语法:
{ role: "<role name>", db: "<database>" }
角色文档具有以下字段:
admin.system.roles.roles[n].role- 角色名称。角色可以是 MongoDB 提供的built-in role或user-defined role。
admin.system.roles.roles[n].db- 定义角色的数据库的名称。
Examples
请考虑在admin数据库的system.roles集合中找到的以下 samples 文档。
用户定义的角色指定特权
以下是为myApp数据库定义的用户定义角色appUser的示例文档:
{
_id: "myApp.appUser",
role: "appUser",
db: "myApp",
privileges: [
{ resource: { db: "myApp" , collection: "" },
actions: [ "find", "createCollection", "dbStats", "collStats" ] },
{ resource: { db: "myApp", collection: "logs" },
actions: [ "insert" ] },
{ resource: { db: "myApp", collection: "data" },
actions: [ "insert", "update", "remove", "compact" ] },
{ resource: { db: "myApp", collection: "system.js" },
actions: [ "find" ] },
],
roles: []
}
privileges数组列出了appUser角色指定的五种特权:
第一个特权允许对
myApp数据库中的所有集合(不包括其系统集合)执行其操作("find","createCollection","dbStats","collStats")。参见将数据库指定为资源。接下来的两个特权允许对
myApp数据库中的特定集合logs和data进行其他操作。参见将数据库的集合指定为资源。最后的特权允许对
myApp数据库中的一个system collections进行操作。尽管第一个特权为find操作提供了数据库范围的权限,但该操作不适用于myApp的系统集合。要授予对系统集合的访问权限,特权必须显式指定集合。参见Resource Document。
如空的roles数组所示,appUser不继承其他角色的其他特权。
用户定义的角色继承自其他角色
以下是为myApp数据库定义的用户定义角色appAdmin的 samples 文档:该文档显示appAdmin角色指定特权,并从其他角色继承特权:
{
_id: "myApp.appAdmin",
role: "appAdmin",
db: "myApp",
privileges: [
{
resource: { db: "myApp", collection: "" },
actions: [ "insert", "dbStats", "collStats", "compact", "repairDatabase" ]
}
],
roles: [
{ role: "appUser", db: "myApp" }
]
}
privileges数组列出了appAdmin角色指定的特权。该角色具有单个特权,该特权允许它对myApp数据库中的所有集合(不包括其系统集合)执行操作("insert","dbStats","collStats","compact","repairDatabase")。参见将数据库指定为资源。
roles数组列出了由角色名称和数据库标识的角色,角色appAdmin从这些角色继承特权。