保护用于客户端(浏览器)访问的文档样式数据库(MongoDb、CouchDb、RavenDb)

保护用于客户端(浏览器)访问的文档样式数据库(MongoDb、CouchDb、RavenDb),mongodb,couchdb,ravendb,nosql,Mongodb,Couchdb,Ravendb,Nosql,支持REST风格的JSON over HTTP访问的文档数据库似乎非常适合支持AJAX丰富的应用程序,在这些应用程序中,浏览器绕过传统的web服务器/应用程序逻辑组件直接调用数据库。这方面的一个例子可能是在用户经过身份验证后检索用户首选项。(BBC主页可能是一个很好的例子,在负载崩溃之前!) 此场景的问题是安全问题-如果使用web服务器对用户进行身份验证(例如,基本表单身份验证),该身份如何传递到文档数据库。是通过web服务器将所有请求代理到数据库的唯一答案吗?也就是说,保护文档数据库,以便没有

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

此场景的问题是安全问题-如果使用web服务器对用户进行身份验证(例如,基本表单身份验证),该身份如何传递到文档数据库。是通过web服务器将所有请求代理到数据库的唯一答案吗?也就是说,保护文档数据库,以便没有直接的外部访问


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

嗯,我只有CouchDB的经验,但希望我能帮助您


CouchDB内置了一个验证过程,您可以用javascript编写验证规则,并可以访问当前用户所在的组。基本上都是由CouchDB自己处理的,您不必关心如何获取登录信息。

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

CouchDB允许您管理用户和角色

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

要限制谁可以从数据库读取文档,可以编辑
/db\u name/\u security
文档并列出用户或角色

但是,我认为您无法使读取访问更细粒度(即允许用户只读取他们创建的文档)

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


有关更多详细信息,请查看、和此。

我认为阅读访问限制在未来版本的列表中。关键似乎是代理-我认为在CouchDB上构建整个web堆栈在现阶段过于雄心勃勃(除非它是一个非常简单的应用程序)-在代理后运行它最有意义,这对我们很有用。我们正在运行MongoDB,但是所有的HTTP访问都是通过IIS代理的-它只是起作用而已。你能添加一个链接到文档中,说明如何做到这一点吗?