保护文档样式数据库(MongoDb,CouchDb,RavenDb)以进行客户端(浏览器)访问

时间:2010-06-22 09:45:25

标签: mongodb couchdb ravendb nosql

支持REST风格的JSON over HTTP访问的文档数据库似乎非常适合支持AJAX丰富的应用程序,其中浏览器直接调用数据库,绕过传统的Web服务器/应用程序逻辑组件。例如,一旦用户通过身份验证,就可以检索用户首选项。 (BBC主页可能是一个很好的例子,在负载崩溃之前!)

此方案的问题是安全问题 - 如果用户使用Web服务器进行身份验证(例如基本表单身份验证),该身份如何转移到文档DB。是通过Web服务器代理对数据库的所有请求的唯一答案 - 即保护文档数据库,以便没有直接的外部访问权限?

这似乎最有意义,也是最容易实现的,但我想知道是否有人在异构环境中使用文档dbs有经验和/或建议?

2 个答案:

答案 0 :(得分:1)

嗯,我只有CouchDB的经验,但希望我能帮到你。

CouchDB内置验证过程,您可以在javascript中编写验证规则,并可以访问当前用户所在的组。它完全由CouchDB本身处理,您无需关心如何获取登录信息。

答案 1 :(得分:1)

这可能与您提到的每个数据库都有所不同。以下是它在CouchDB中的工作原理。

CouchDB允许您管理用户和角色。

您可以使用设计文档中的validate_doc_update功能来限制文档创建/更新。例如,您可以编写一个验证,拒绝除了作者之外的任何人的文档更新。

要限制谁可以从数据库中读取文档,您可以编辑/db_name/_security文档并列出用户或角色。

但是,我认为您不能使读取访问更精细(即允许用户只读取他们创建的文档)。

要实现这一点,您必须将CouchDB置于代理之后并使用视图将文档提供给经过身份验证的用户。您仍然可以通过这种方式使用CouchDB用户管理。代理只是隐藏了对数据库的直接访问。

有关详细信息,请查看security overview on CouchDB wikisecurity chapter of the Relax book和此short screencast