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 角色从中继承权限的。