CouchDB:无需身份验证即可创建用户。标准行为?

nyl*_*lki 2 couchdb

很抱歉这个相当是/否的问题,但我还没有找到可以澄清它的文件,或者我一定在这里错过了它。您可以通过以下方式简单地为 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"}'
Run Code Online (Sandbox Code Playgroud)

我刚试过。它确实有效并创建了一个新用户。我不确定这是不是有意的(服务器管理员存在,所以它不是管理员方)。可以限制/配置此行为以防止不需要的大规模注册吗?

nyl*_*lki 6

我在这里找到了我的问题的答案:

此外,_users 数据库现在的处理方式与其他数据库不同:

An anonymous user can only create a new document.
Run Code Online (Sandbox Code Playgroud)

因此,是的,匿名(未经身份验证)用户可以在 CouchDB 中创建新用户。

要配置/限制此行为,您可以修改设计文档中的validate_doc_update函数_design/_auth,该函数已经处理了某些用户创建限制(参见官方示例)。!is_server_or_database_admin(userCtx, secObj)那里已经存在支票。要仅允许管理员添加新用户,您可以:

An anonymous user can only create a new document.
Run Code Online (Sandbox Code Playgroud)

在该语句的开头,当未通过 db admin 身份验证时,禁止任何进一步的操作。

然后的部分validate_doc_update看起来像:

    throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
Run Code Online (Sandbox Code Playgroud)

更多细节请参考官方文档中的示例(滚动到底部)