1.3.17. /db/_security

GET /{db}/_security

返回指定数据库的当前安全对象。

安全对象包含两个必填元素,adminsmembers,它们分别用于指定对数据库具有管理员和成员权限的用户和/或角色列表。

  • members:它们可以从数据库中读取所有类型的文档,并且可以写入(和编辑)数据库中的文档,但设计文档除外。

  • admins:它们拥有 members 的所有权限,以及以下权限:写入(和编辑)设计文档,添加/删除数据库管理员和成员,以及设置 数据库修订版本限制。它们不能创建数据库,也不能删除数据库。

membersadmins 对象都包含两个数组类型的字段

  • names:CouchDB 用户名列表

  • roles:用户角色列表

安全对象中的任何其他字段都是可选的。整个安全对象可用于验证和其他内部函数,以便数据库可以控制和限制功能。

如果 adminsmembers 属性的 namesroles 字段都是空数组,或者不存在,则表示数据库没有管理员或成员。

如果没有管理员,只有服务器管理员(具有保留的 _admin 角色)才能更新设计文档并进行其他管理员级别的更改。

如果没有成员或角色,任何用户都可以写入常规文档(任何非设计文档)并从数据库中读取文档。

从 CouchDB 3.x 开始,新创建的数据库默认情况下将 _admin 角色授予,以防止意外访问。

如果为数据库定义了任何成员名称或角色,则只有具有匹配名称或角色的经过身份验证的用户才能从数据库中读取文档(或执行 GET /{db} 调用)。

注意

如果数据库的安全对象从未设置过,则返回的值将为空。

还要注意,安全对象不是常规的版本化文档(也就是说,它们不受 MVCC 规则的约束)。这是一个设计选择,旨在加快授权检查(避免遍历数据库的文档 B 树)。

参数:
  • db – 数据库名称

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

响应 JSON 对象:
  • admins (object) – 具有两个字段的对象,如 namesroles。有关更多信息,请参阅上面的描述。

  • members (object) – 具有两个字段的对象,如 namesroles。有关更多信息,请参阅上面的描述。

状态代码:
  • 200 OK – 请求已成功完成

请求:

GET /db/_security HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 109
Content-Type: application/json
Date: Mon, 12 Aug 2013 19:05:29 GMT
Server: CouchDB (Erlang/OTP)

{
    "admins": {
        "names": [
            "superuser"
        ],
        "roles": [
            "admins"
        ]
    },
    "members": {
        "names": [
            "user1",
            "user2"
        ],
        "roles": [
            "developers"
        ]
    }
}
PUT /{db}/_security

设置给定数据库的安全对象。

参数:
  • db – 数据库名称

请求头:
请求 JSON 对象:
响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

响应 JSON 对象:
  • ok (boolean) – 操作状态

状态代码:

请求:

shell> curl http://localhost:5984/pineapple/_security -X PUT -H 'content-type: application/json' -H 'accept: application/json' -d '{"admins":{"names":["superuser"],"roles":["admins"]},"members":{"names": ["user1","user2"],"roles": ["developers"]}}'
PUT /db/_security HTTP/1.1
Accept: application/json
Content-Length: 121
Content-Type: application/json
Host: localhost:5984

{
    "admins": {
        "names": [
            "superuser"
        ],
        "roles": [
            "admins"
        ]
    },
    "members": {
        "names": [
            "user1",
            "user2"
        ],
        "roles": [
            "developers"
        ]
    }
}

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 12
Content-Type: application/json
Date: Tue, 13 Aug 2013 11:26:28 GMT
Server: CouchDB (Erlang/OTP)

{
    "ok": true
}