1.3.17. /db/_security
¶
- GET /{db}/_security¶
返回指定数据库的当前安全对象。
安全对象包含两个必填元素,
admins
和members
,它们分别用于指定对数据库具有管理员和成员权限的用户和/或角色列表。members
:它们可以从数据库中读取所有类型的文档,并且可以写入(和编辑)数据库中的文档,但设计文档除外。admins
:它们拥有members
的所有权限,以及以下权限:写入(和编辑)设计文档,添加/删除数据库管理员和成员,以及设置 数据库修订版本限制。它们不能创建数据库,也不能删除数据库。
members
和admins
对象都包含两个数组类型的字段names
:CouchDB 用户名列表roles
:用户角色列表
安全对象中的任何其他字段都是可选的。整个安全对象可用于验证和其他内部函数,以便数据库可以控制和限制功能。
如果
admins
或members
属性的names
和roles
字段都是空数组,或者不存在,则表示数据库没有管理员或成员。如果没有管理员,只有服务器管理员(具有保留的
_admin
角色)才能更新设计文档并进行其他管理员级别的更改。如果没有成员或角色,任何用户都可以写入常规文档(任何非设计文档)并从数据库中读取文档。
从 CouchDB 3.x 开始,新创建的数据库默认情况下将
_admin
角色授予,以防止意外访问。如果为数据库定义了任何成员名称或角色,则只有具有匹配名称或角色的经过身份验证的用户才能从数据库中读取文档(或执行
GET /{db}
调用)。注意
如果数据库的安全对象从未设置过,则返回的值将为空。
还要注意,安全对象不是常规的版本化文档(也就是说,它们不受 MVCC 规则的约束)。这是一个设计选择,旨在加快授权检查(避免遍历数据库的文档 B 树)。
- 参数:
db – 数据库名称
- 请求头:
Accept –
application/json
text/plain
- 响应头:
application/json
text/plain; charset=utf-8
- 响应 JSON 对象:
admins (object) – 具有两个字段的对象,如
names
和roles
。有关更多信息,请参阅上面的描述。members (object) – 具有两个字段的对象,如
names
和roles
。有关更多信息,请参阅上面的描述。
- 状态代码:
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 – 数据库名称
- 请求头:
Accept –
application/json
text/plain
Content-Type – application/json
- 请求 JSON 对象:
admins (object) – 具有两个字段的对象,如
names
和roles
。 有关更多信息,请参阅上面的描述.members (object) – 具有两个字段的对象,如
names
和roles
。 有关更多信息,请参阅上面的描述.
- 响应头:
application/json
text/plain; charset=utf-8
- 响应 JSON 对象:
ok (boolean) – 操作状态
- 状态代码:
200 OK – 请求已成功完成
401 Unauthorized – 需要 CouchDB 服务器管理员权限
请求:
shell> curl https://127.0.0.1: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 }