【问题标题】:Creating regular users in CouchDB在 CouchDB 中创建普通用户
【发布时间】:2010-09-10 12:54:24
【问题描述】:

如何在 CouchDB 中创建常规的非管理员用户?

【问题讨论】:

  • 您可能对这篇 wiki 文章感兴趣。 wiki.apache.org/couchdb/How_to_create_users_via_script
  • 命名规则是什么?我似乎无法在任何地方找到答案。用户名可以是电子邮件地址吗?
  • 用户名绝对可以是任何 UTF-8 字符串。例如,这就是couchdb_peruser 需要对用户名进行哈希处理以生成数据库名称的原因。您可以在 the design doc for the users database 中找到一些限制: - 用户名不能以下划线开头 _ - 用户名不能包含冒号 : _(2019 年仍然很难在网上找到答案)

标签: couchdb


【解决方案1】:

首先将用户放入_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_shasalt 字段中(见下文)。

对于 CouchDB

{
    "_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 个用户。如果您懒得阅读已经建议的文档,那应该这样做。

【讨论】:

  • 我似乎无法弄清楚命名约定。用户名有什么限制吗?除了前缀 org.couchdb.user:
  • 所以当您存储用户密码时,每个人都可以看到它们?以及如何散列它们?
  • @astroanu:是的,您以明文形式发布它,但是当它从服务器返回给您时(以及之后的每个 GET 请求),它只会获取密码的加盐和哈希版本返回。
  • Cloudant 怎么样?
【解决方案2】:

CouchDB 文档中有一篇关于 CouchDB 的 security features 的短文,其中包含有关如何创建新用户的部分。

【讨论】:

  • 这是正确的。 IDanil 问题的简短回答是“在_users 数据库中创建一个文档”。但是,您的链接解释了所有细节和含义。
【解决方案3】:

我认为您必须像许多网站一样在前面放置一个 Web 框架才能做到这一点。 Couchdb 管理员角色不能在逐个记录的基础上工作,因此如果您创建一个可以读取配置文件或帐户表的读取器,他们就可以读取记录。

【讨论】:

  • 这个帖子需要解释为什么这么多人投了反对票。 CouchDB 允许您通过将 JSON 对象发送到 REST-API 端点之一来创建用户。 Gjorgji 在他的帖子中列出了本文档的结构。
猜你喜欢
  • 2015-06-20
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
相关资源
最近更新 更多