1.3.17. /db/_security

GET /{db}/_security

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

安全客体由两个要素构成, adminsmembers ,用于指定分别对数据库具有管理员和成员权限的用户和/或角色列表:

  • members :他们可以从数据库中读取所有类型的文档,并且可以向数据库写入(和编辑)文档(设计文档除外)。
  • admins :他们拥有 members 加上特权:编写(和编辑)设计文档,添加/删除数据库管理员和成员,并设置 database revisions limit . 他们既不能创建数据库也不能删除数据库。

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

  • names :CouchDB用户名列表
  • roles :用户角色列表

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

如果admins或members属性的names和roles字段都是空数组或不存在,则表示数据库没有管理员或成员。

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

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

由于CouchDB3.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
}