在Couchdb 2.1群集中创建只读和只写用户

时间:2018-08-30 15:44:52

标签: couchdb

我最近创建了一个由3个服务器组成的ouchdb 2.1集群,并正在考虑创建一些应用程序安全性。这个想法是有一个只写用户,该用户将被分配给需要写入数据库的应用程序,一个只读用户,该用户将被从数据库中读取的应用程序使用。另一个只读用户将被授予开发人员以执行开发人员的操作。问题是我找不到有关此操作的任何文档。我们以前是在旧的1.6安装上安装的,但是那是在我的时间之前设置的。任何指导表示赞赏。

1 个答案:

答案 0 :(得分:1)

创建一个只读用户非常简单。您必须在数据库上创建一个验证功能,该功能仅允许某些角色写入数据库。旧的堆栈溢出文章在这里。 CouchDB-wide read-only access rights

仅写数据库有点棘手。您必须在数据库前面放置一个代理,该代理仅允许访问写接口,并阻止对读接口的访问。我有一个项目,在该项目中,通过将代理放在最前面并指向沙发床的重写接口来完成此任务。

代理指向

  

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"
}