在没有管理员密码的情况下在 couchdb 3 中创建新用户

creating new user in couchdb 3 without admin password

我刚刚下载并安装了 CouchDB v3

第一次启动时,它提示我设置管理员密码,我照做了。

对于我正在构建的 Web 应用程序,我想使用 CouchDB 用户身份验证功能,因此我使用 Fauxton UI.

创建了一个新的 _users 数据库

创建 _users 数据库后,我调用了 REST API 来插入一个新用户(这是从 documentation 中获取的示例代码):

$ curl -X PUT http://localhost:5984/_users/org.couchdb.user:jan \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{"name": "jan", "password": "apple", "roles": [], "type": "user"}'

而不是预期的响应

{"ok":true,"id":"org.couchdb.user:jan","rev":..."}

我得到

{"error":"unauthorized","reason":"You are not authorized to access this db."}

将管理员凭据添加到 API 调用时,它按预期工作:

$ curl -X PUT http://admin:____@localhost:5984/_users/org.couchdb.user:jan \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{"name": "jan", "password": "apple", "roles": [], "type": "user"}'

{"ok":true,"id":"org.couchdb.user:jan","rev":"..."}

我的问题:

是否可以设置任何设置或权限来使请求工作而无需 添加管理员凭据? (据我所知,这在 v2.x 中运行良好)

你错过了旧管理党的乐趣,多年来它一直是 CouchDB 的默认设置,这意味着它安装时 安全性,因为每个人实际上都是管理员。

从 CouchDB 3.0 之路:安全性[1]

One of the aspects of getting started easily was a 1.x-era choice to make it easy to use CouchDB: the Admin Party. Admin Party means that, by default, any request made against CouchDB was done in the context of an admin user, i.e. you were allowed to do anything.

3.0 通过关闭管理员党改变了所有这一切——一堆嗡嗡声杀人!

我怀疑有更复杂的解决方案,但对于那些想快速参加 [2] 的人来说,对 etc/local.ini 和 [= 的任何权限进行微小的更改12=]就满足了。

关键是配置属性require_valid_user[3].

etc/local.ini中,修改chttpdcouch_httpd_auth部分

[chttpd]
require_valid_user = false

[couch_httpd_auth]
require_valid_user = false

这就是所需的全部内容,除非_users 数据库定义了成员and/or 角色。如果有,必须删除它们(使用 Fauxton 很容易)。

清理 members/roles 并更改 etc/local.ini 后重新启动 CouchDB,您应该能够毫无问题地创建用户。派对! 👍

请务必考虑此类更改的后果。

免责声明 - 我不推荐 运行 CouchDB 在类似于管理方的任何安全上下文中!


1The Road to CouchDB 3.0: Security
2Party On
3 require_valid_user