将CouchDB中的资源访问限制为2个用户

时间:2010-11-04 22:21:40

标签: resources couchdb

目前,我正在为一个新项目评估CouchDB。

这个项目的关键约束是强大的隐私。需要有两个用户可读的资源。

一个用例可能类似于Twitter上的直接消息(DM)。另一个用例是User / SuperUser访问级别。

我目前对如何使用CouchDB解决这些问题没有任何想法,除了创建一个只能由这两个用户访问的数据库。我想知道如何构建聚合来自多个数据库的数据的视图?

您对我有任何提示/建议吗?

2 个答案:

答案 0 :(得分:3)

我在couchdb邮件列表上多次问过这个问题,从来没有得到答案。

有很多事情缺少了couchdb。

其中一个是文档级安全性:

  • 仅允许特定用户查看文档
  • 过滤在用户级权限基础上的视图中编制索引的文档

我认为当前的couchdb实现没有对权限考虑的解决方案。

一种解决方案是使用外部索引工具(如lucene),并使用用户权限标记文档,然后使用用户权限定义发出lucene查询以获取文档。它还意味着服务器上的额外负载(lucene需要JVM)以及数据可用的额外延迟(lucene索引时间......)

对于几个数据库解决方案,有一些语言框架实现,它们不允许使用多个数据库(例如Ruby的couch_potato)。

拥有多个数据库也意味着如果复制数据库,您将拥有多个复制过程。

此外,这意味着将为每个数据库更新视图。在某些情况下,这比在单个数据库中索引大量视图更好,但这也意味着不同的用户可能不是最新的单一信息源(即一些将更新他们的视图,其他人不会)。因此,您无法保证所有用户的数据都是一致的。

因此,除非在沙发核心中实现某些内容以管理文档级授权,否则CouchDB似乎不适合管理具有隐私限制的数据。

答案 1 :(得分:1)

关于你想要完成什么,数据是什么样的,有很多细节缺失,所以很难提出具体的建议。您可以为每个用户创建一个数据库,并将项目复制到每个用户数据库中(对于您描述的DM用例)。每个用户只能访问自己的数据库,然后您可以拥有一个可以访问所有数据库的管理员用户。如果您需要稍后更新这些记录,将它们复制到多个数据库可能不是一个好主意,那么您可能会考虑是否要控制与存储不同级别的权限。

对于汇总来自多个数据库的数据的视图,我建议您查看休息室和bigcouch,它们采用不同的方法。

http://tilgovi.github.com/couchdb-lounge/ http://support.cloudant.com/faqs/views/chained-mapreduce-views