文档菜单
文档首页
/
MongoDB 手册
/ / /

system.roles 集合在自管理部署中

本页内容

  • system.roles 架构
  • 示例

管理员数据库中的 system.roles 集合存储用户自定义的角色。为了创建和管理这些用户自定义角色,MongoDB 提供了角色管理命令.

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

db 字段是一个字符串,指定了角色所属的数据库。MongoDB 通过其名称(即 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.roles

roles数组包含角色文档,指定了此角色从中继承权限的角色。

角色文档具有以下语法

{ role: "<role name>", db: "<database>" }

角色文档具有以下字段

admin.system.roles.roles[n].role

角色的名称。角色可以是MongoDB提供的内置角色,也可以是用户定义的角色

admin.system.roles.roles[n].db

定义角色的数据库名称。

以下是在 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 数据库中特定集合 logsdata 上执行额外的操作。请参阅 指定数据库集合作为资源。

  • 最后一个权限允许在 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 角色从中继承权限的。

返回

参考