Couchdb 通过_用户数据库管理Cloudant访问

Couchdb 通过_用户数据库管理Cloudant访问,couchdb,cloudant,Couchdb,Cloudant,我已经创建了_users数据库以及_security文档,并根据设置适当的安全性 然后,我创建了一个角色为“\u reader”的用户“test”,但当我尝试登录到Cloudant时,它无法识别该用户 _用户数据库包含一个文档: { "_id": "test", "_rev": "1-96973497bc9c89989c4beed02e3f0b96", "name": "test", "roles": [ "_reader" ], "type": "user",

我已经创建了_users数据库以及_security文档,并根据设置适当的安全性

然后,我创建了一个角色为“\u reader”的用户“test”,但当我尝试登录到Cloudant时,它无法识别该用户

_用户数据库包含一个文档:

{
  "_id": "test",
  "_rev": "1-96973497bc9c89989c4beed02e3f0b96",
  "name": "test",
  "roles": [
    "_reader"
  ],
  "type": "user",
  "password": "password"
}
然后,我尝试使用上面创建的用户名“test”和密码“password”查看设计文档,但是它不起作用

在设计文件所在数据库的安全文件中,我有:

{ "couchdb_auth_only": true, "members": { "names": [ "test" ], "roles": [ "_reader" ] } }
有什么建议吗


谢谢

I还没有用Cloudant测试过这一点,我也没有用密码专家验证过这种方法的安全性(请这样做),但希望它能为您指明正确的方向:

首先,您需要生成一个salt和一个密码。\u sha: 创建用户和安全文档(选项1):
\u用户
文档中的角色映射到
\u安全
文档中定义的角色

// _security
{
   "couchdb_auth_only": true,
   "members": {
     "names": [],
     "roles": ["standarduser"]
   },
   "admins": {}
 }

  • 数据库成员-按数据库定义。他们可以从数据库中读取所有类型的文档,并且可以向数据库中写入(和编辑)除设计文档以外的文档

  • 数据库管理员-按数据库定义。他们拥有成员所拥有的所有特权以及以下特权:编写(和编辑)设计文档、添加/删除数据库管理员和成员、设置数据库修订限制(/somedb/\u revs\u limit API)以及针对数据库执行临时视图(/somedb/\u temp\u view API)。他们不能创建数据库,也不能删除数据库

在我的示例中,我的用户joe被赋予了角色
standarduser
,该角色映射到数据库的数据库成员

创建用户和安全文档(选项2): 请注意,我可以指定
成员名称,而不是使用
角色

// _user document
{
  "_id"          : "org.couchdb.user:joe",
  "type"         : "user",
  "name"         : "joe",
  "password_sha" : "316ccb0df3c8bbd8f568347827803682d2c93849",
  "salt"         : "bba45713ef54016c8ef4b56b6b147936"
}

// _security document
{
  "couchdb_auth_only": true,
  "members": {
    "names": ["joe"],
    "roles": []
  },
  "admins": {}
}
警告 确保
member.names
member.roles
参数均不为空,因为这将授予每个人读写权限:

{
  "couchdb_auth_only": true,
  "members": {
    "names": [],
    "roles": []
  },
  "admins": {}
}
由于没有成员,任何用户都可以编写常规文档(任何非设计文档)并从数据库中读取文档

资料来源:

Julie——在ApacheCouchDB中,当前必须使用验证函数来启用只读访问。(没有一个“交钥匙”用户角色可以满足您的要求。)

特别是,我发现此线程非常有用:

它链接到官方CouchDB书籍中关于验证函数的部分:以及JavaScript示例和说明:


在Cloudant中,使用API键进行只读访问稍微简单一些,但您仍然可以使用现成的CouchDB实现只读访问。这并不像你想象的那样是交钥匙。祝你好运

你看过这个帖子吗?是的,我看过那个帖子。我在网上搜索了几个小时,不知道如何设置。那篇文章是几年前写的,对我一点帮助都没有。github链接太复杂了,我无法理解。我不知道node.js。是否有一些java代码可以对密码进行类似的散列或其他操作?或者只是简化了javascript。。。idk,这太完美了。非常感谢你!
// _security
{
   "couchdb_auth_only": true,
   "members": {
     "names": [],
     "roles": ["standarduser"]
   },
   "admins": {}
 }
// _user document
{
  "_id"          : "org.couchdb.user:joe",
  "type"         : "user",
  "name"         : "joe",
  "password_sha" : "316ccb0df3c8bbd8f568347827803682d2c93849",
  "salt"         : "bba45713ef54016c8ef4b56b6b147936"
}

// _security document
{
  "couchdb_auth_only": true,
  "members": {
    "names": ["joe"],
    "roles": []
  },
  "admins": {}
}
{
  "couchdb_auth_only": true,
  "members": {
    "names": [],
    "roles": []
  },
  "admins": {}
}