system.roles
集合在自管理部署中
管理员数据库中的 system.roles
集合存储用户自定义的角色。为了创建和管理这些用户自定义角色,MongoDB 提供了角色管理命令.
system.roles
模式
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.privileges
数组
privileges
包含定义角色权限的权限文档。权限文档具有以下语法
{ resource: { <resource> }, actions: [ "<action>", ... ] } 每个权限文档包含以下字段
admin.system.roles.privileges[n].resource
指定权限
actions
应用到的资源的文档。该文档有以下形式之一{ db: <database>, collection: <collection> } 或
{ cluster : true } 有关详细信息,请参阅 自托管部署的资源文档。
admin.system.roles.privileges[n].actions
资源上允许的操作数组。有关操作列表,请参阅自托管部署的权限操作。
示例
以下是在 admin
数据库的 system.roles
集合中找到的示例文档。
用户定义角色指定权限
以下是为 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
数据库中的一个 系统集合 上执行操作。虽然第一个权限为find
操作提供了数据库级别的权限,但此操作不适用于myApp
的系统集合。要访问系统集合,必须明确指定权限。请参阅 资源文档关于自托管部署。
如空 roles
数组所示,appUser
从其他角色继承没有额外的权限。
用户自定义角色继承自其他角色
以下是为 myApp
数据库定义的用户自定义角色 appAdmin
的示例文档:文档显示,appAdmin
角色指定了权限并从其他角色继承权限
{ _id: "myApp.appAdmin", role: "appAdmin", db: "myApp", privileges: [ { resource: { db: "myApp", collection: "" }, actions: [ "insert", "dbStats", "collStats", "compact" ] } ], roles: [ { role: "appUser", db: "myApp" } ] }
privileges
数组列出了 appAdmin
角色指定的权限。此角色有一个权限,允许其在 myApp
数据库中的所有集合上执行操作("insert"
、"dbStats"
、"collStats"
、"compact"
),但排除其系统集合。请参阅 指定数据库作为资源。
roles
数组列出了角色和数据库,这些角色是 appAdmin
角色从中继承权限的。