抱歉,这个问题比较类似是非问题,但我没有找到可以澄清这个问题的文档,或者我一定是错过了这里。您是否可以按照以下方式简单地向 CouchDB 创建新的用户条目(无需成为管理员用户):
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"}'
我刚刚试过了。它确实有效并创建了一个新用户。我不确定这是否是故意的(存在服务器管理员,因此不是管理员方)。可以限制/配置此行为,以防止不必要的大规模注册吗?
答案1
我找到了问题的答案这里:
此外,_users 数据库现在与其他数据库的处理方式不同:
An anonymous user can only create a new document.
所以,是的,匿名(未经身份验证的)用户可以在 CouchDB 中创建新用户。
要配置/限制此行为,您可以修改设计文档validate_doc_update
中的函数_design/_auth
,该函数已经处理了某些用户创建限制(请参阅官方示例)。该检查!is_server_or_database_admin(userCtx, secObj)
已存在。若要仅允许管理员添加新用户,您可以:
throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
在该语句的开头,当未以数据库管理员身份进行身份验证时,禁止任何进一步的操作。
然后的部分validate_doc_update
看起来像这样:
//[… existing code …]
if(!is_server_or_database_admin(userCtx, secObj)) {
throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
//[… existing code …]
}
请参阅示例(滚动至底部)请参阅官方文档了解更多详细信息。
答案2
为了防止匿名用户在 CouchDB 2.2 中的“_users”数据库中创建新用户,请打开 Fauxton DB 管理器并单击“_users”DB。
单击“权限”选项卡,将“用户”设置为“admin”,将“角色”设置为“_admin”。
还将“成员”设置为“admin”,将“角色”设置为“_admin”。
保存文件即可。
(感谢 CouchDB 用户的 Eric 和 Chris)
答案3
公认的答案是错误的,因为它暗示:
“您可以修改 _design/_auth 设计文档中的validate_doc_update 函数”
这并不完全正确。CouchDB将要允许您修改 _design/_auth 设计文档中的validate_doc_update函数,但是重新启动 CouchDB 后,文档内容将恢复到原始状态。这意味着,如果您的 CouchDB 重新启动,更改将会丢失。
请参阅 CouchDB 文档 - http://docs.couchdb.org/en/stable/intro/security.html#authentication-database:
There is a special design document _auth that cannot be modified
正确的解决方案是从 CouchDB 内部改变行为本地配置文件配置文件。
看https://docs.couchdb.org/en/latest/config/auth.html#couch_httpd_auth/require_valid_user
需要有效用户
When this option is set to true, no requests are allowed from anonymous users. Everyone must be authenticated. [chttpd] require_valid_user = false [couch_httpd_auth] require_valid_user = false
答案4
编辑:抱歉,这没有回答问题。我读得不够仔细。
标准行为是“管理员方”,这意味着,如果没有创建初始管理员(见下文),则每个人都是管理员。所以回答这个问题 - 是的。
CouchDB 提供基本的身份验证机制。
最重要的文档部分是这样的:http://docs.couchdb.org/en/latest/intro/security.html?highlight=security#authentication-database。用户存储在身份验证数据库中,管理员存储在 local.ini 文件中。要添加管理员:
- 运行以下命令找到 local.ini 文件:
couchdb -c
- 打开 local.ini 文件
- 在部分中
[admins]
取消注释该行admin
并添加纯文本密码 - 重新启动 CouchDB。然后,密码将被加密(重新打开 local.ini 进行检查)
您当然也可以向用户数据库添加角色admin
,但即使名称相同,它也只是另一个用户。
另请参阅http://docs.couchdb.org/en/latest/api/database/security.html