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

    • db字段是一个字符串,用于指定角色所属的数据库。 MongoDB 通过其名称(即role)及其数据库的配对来唯一标识每个角色。
  • admin.system.roles. 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

    • roles数组包含角色文档,这些角色文档指定此角色inherits的特权。

角色文档具有以下语法:

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

角色文档具有以下字段:

  • admin.system.roles.roles[n]. 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数据库中的特定集合logsdata进行其他操作。参见将数据库的集合指定为资源

  • 最后的特权允许对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从这些角色继承特权。