CouchDB有一个机制来防止未经授权的写入。
它还可以防止未经授权的读取吗?
答案 0 :(得分:23)
是的,CouchDB可以防止未经授权的读取。不幸的是,它稍微不那么简单。
想象一下秘密拍卖应用程序。您出价20美元,我出价10美元;沙发文件中的每个出价。 Couch让我们阅读我们自己的投标文件,但没有其他人。 然而,有一个map-reduce视图显示平均值。我加载视图并看到平均值是15美元,因此我得出结论,您的出价是20美元,我已经破坏了安全策略。 查看输出可能会泄露部分或全部文档的信息。在文档级强制执行安全性是不可行的。这就是读取访问权限在数据库级别的原因。
我知道,这很糟糕。但这是唯一正确,可扩展的答案。
这是Couch理念创建许多数据库的部分原因 - 甚至每个用户一个(或更多!)。对数据库的读取权限在数据库readers
对象的_security
值中设置。 (注意,CouchDB中继中的字段readers was renamed to members,因为它还指定了谁可以写入数据库。)
这种技术的工作原理如下:
_security
对象。validate_doc_update
共享代码。)?filter=my_filter_function
从主数据库复制到用户的数据库。当然,这完全适用于纯Couch应用程序,用户可以直接访问Couch。如果您有一个中间层(MVC控制器,或只是一个反向HTTP代理),那么您可以在用户和沙发之间强制执行策略。但要小心。例如,_show
函数或_rewrite
规则可能允许用户加载视图或文档,无论您的策略如何。