在CouchDB中创建普通用户


70

如何在CouchDB中创建普通的非管理员用户?


1
您可能对此Wiki文章感兴趣。wiki.apache.org/couchdb/How_to_create_users_via_script
2013年

命名规则是什么?我似乎在任何地方都找不到答案。用户名可以是电子邮件地址吗?
哥斯达黎加

用户名绝对可以是任何UTF-8字符串。例如,这就是为什么couchdb_peruser需要对用户名进行哈希处理以建立数据库名称的原因。您可以在用户数据库的设计文档中找到一些限制:-用户名不能以下划线开头_-用户名不能包含冒号: _(2019年仍然很难在网上找到答案)
Leonid Shevtsov

Answers:


99

首先,您将用户放入_users数据库中。文件ID必须为org.couchdb.user:username,例如

对于CouchDB 1.2.0或更高版本,请使用以下命令:

{
    "_id": "org.couchdb.user:dbreader",
    "name": "dbreader",
    "type": "user",
    "roles": [],
    "password": "plaintext_password"
}

CouchDB将在服务器端为您哈希密码并添加密码,并将值保存在字段password_sha和中salt(请参见下文)。

如果CouchDB <1.2.0,则用户文档应如下所示:

{
    "_id": "org.couchdb.user:dbreader",
    "name": "dbreader",
    "type": "user",
    "roles": [],
    "salt": "54935938852dd34f92c672ab31e397cedaf0946d",
    "password_sha": "42253ea4461a604f967813aaff90b139d7018806"
}

请注意,CouchDB 1.3.0和更高版本将使用PBKDF2代替aha&salt来哈希密码。

然后,您可以通过在未版本控制的特定数据库中创建ID为_security的文档来创建每个数据库身份验证,例如

{
    "admins": {
        "names": ["dbadmin"],
        "roles": ["editor"]
    },
    "readers": {
        "names": ["dbreader"],
        "roles": ["reader"]
    }
}

这意味着_users除了admin dbadmindbreader之外还有2个用户。如果您懒得阅读已经建议的文档,那么应该这样做。


1
我似乎无法弄清楚命名约定。用户名可以有什么限制?除前缀org.couchdb.user外:
Costa

因此,存储用户密码时,每个人都会看到它吗?以及如何哈希它们?
astroanu 2015年

1
@astroanu:是的,您以明文形式发布它,是的,但是当它从服务器返回给您时(以及此后的每个GET请求),返回的只是密码的加盐和散列版本。
MidnightLightning

那Cloudant呢?
塞巴斯蒂安·罗哈斯

20

CouchDB文档中有一篇简短的文章,内容涉及CouchDB的安全功能以及如何配置类似于关系数据库中用户的“读取器”


3
这是对的。IDanil问题的简短答案是“在_users数据库中创建一个文档”。但是,您的链接说明了所有详细信息和含义。
JasonSmith's

-13

我认为您必须像许多站点一样,将Web框架放在前面。Couchdb管理员角色不适用于逐条记录的记录,因此,如果您创建可以读取配置文件或帐户表的读取器,则他们可以读取记录。


这篇文章需要解释为什么这么多人投反对票。CouchDB允许您通过将JSON对象发送到REST-API端点之一来创建用户。该文档的结构已由Gjorgji在他的帖子中列出。
Ruud Verhoef
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.