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.
db
-
admin.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
从这些角色继承特权。