首页 > 解决方案 > 在 Couchdb 2.1 集群中创建只读和只写用户

问题描述

我最近创建了一个 3 服务器 couchdb 2.1 集群,并正在研究创建一些应用程序安全性。这个想法是有一个只写用户将被提供给需要写入数据库的应用程序和一个只读用户,它将由从数据库读取的应用程序使用。另一个只读用户将被授予开发人员做开发人员所做的事情。问题是我找不到任何关于这样做的文档。我们以前在旧的 1.6 安装上安装过这个,但这是在我之前设置的。任何指导表示赞赏。

标签: couchdb

解决方案


创建一个只读用户是相当简单的。您必须在数据库上创建一个仅允许某些角色写入数据库的验证函数。旧的堆栈溢出文章在这里。 CouchDB 范围的只读访问权限

只写数据库有点棘手。您必须在数据库前面放置一个代理,该代理只允许访问写入接口并阻止访问读取接口。我有一个项目,我们通过在前面放置一个代理并将其指向 couchdb 上的重写接口来完成此操作。

代理指向

https://couchserver.com/databasename/_design/app/_rewrite

设计文档看起来像

{
   "_id": "_design/app",
   "rewrites": [
       {
           "to": "../../_bulk_docs",
           "from": "/db/_bulk_docs",
           "method": "POST"
       },
       {
           "to": "../../_revs_diff",
           "from": "/db/_revs_diff",
           "method": "POST"
       },
       {
           "to": "../../_local/*",
           "from": "/db/_local/*",
           "method": "GET"
       },
       {
           "to": "../../_local/*",
           "from": "/db/_local/*",
           "method": "POST"
       },
       {
           "to": "../../_local/*",
           "from": "/db/_local/*",
           "method": "PUT"
       },
       {
           "to": "../../../",
           "from": "/",
           "method": "GET"
       },
       {
           "to": "../../fakedb",
           "from": "/",
           "method": "GET"
       },
       {
           "to": "/../../fakedb",
           "from": "/db/*",
           "method": "GET"
       }
   ]
}

这允许我们打开最小的接口,让 pouchdb 将数据从客户端同步到我们的服务器。我们必须添加的最后一点是 pouchdb 的解决方法,它会创建错误,因为它请求

https://proxyserver.com/db

开始复制时。该调用并不是真正需要的,解决方法是在数据库中创建一个返回类似响应的文档。

{
   "_id": "fakedb",
   "_rev": "1-063ad938e0501105d2f304db16dd4970",
   "db_name": "dbname"
}

推荐阅读