【问题标题】:Is it possible to use CouchDB's filtered replication to replicate only the subset of data ACLed to a user?是否可以使用 CouchDB 的过滤复制仅复制 ACLed 给用户的数据子集?
【发布时间】:2012-05-22 18:02:27
【问题描述】:

特别是,过滤复制可以用 PouchDB 完成吗?我想确保客户端不能省略过滤器,从而与整个数据库同步。

【问题讨论】:

    标签: security couchdb offline pouchdb


    【解决方案1】:

    没有 CouchDB 复制“协议”。复制过程只是一个客户端连接到两个 CouchDB 端点,从一个端点读取文档,然后将它们写入另一个端点。当然,CouchDB 内置了这样一个客户端(“复制器”);但从概念上讲,它是一个第三方应用程序。

    这意味着,您可以从应用程序的安全分析中删除复制。首先考虑普通的 Web 客户端读取和写入您的服务器。把它锁起来。您可能会假设一个假设的对手使用被黑的网络浏览器,或者使用自定义 HTTP 客户端(例如,它不遵守跨域策略)。

    解决了该问题后,复制将必然遵循您的安全策略。

    换句话说,在 PouchDB 和 CouchDB 之间进行复制:

    • 如果您推送到远程服务器,您的安全工具就是远程validate_doc_update 函数。
    • 如果您从远程服务器,您的安全工具是数据库_security 对象--特别是"members" 数组。客户端可以完全读取数据库,也可以根本不读取。当然,您可以对服务器端的特殊用途数据库进行过滤复制。

    【讨论】:

    • 这是我的假设,您不会直接公开 CouchDB(就像您不会直接公开 MySQL 或任何其他数据存储一样),而是实现某种直通端点。但是当你说没有CouchDB“协议”时,我有点困惑?我理解您所说的充当第三方客户端的意思,但我的假设是 PouchDB 的复制通过本质上将该行为视为协议来实现互操作,还是我在这里仍然遗漏了什么?
    • 是的,你是对的。我的评论是随意的,并不意味着一清二楚。当然,要复制的端点之间存在严格的对话:协议。但很酷的是,这个对话只是一个客户端连接并进行正常更新。复制没有神奇的带外通道。我在这里更详细地描述了概念模型:stackoverflow.com/questions/4766391/…
    • CouchDB 实际上被设计成直接暴露给用户,就像一个应用服务器。当然,很多人也成功地将它用于传统的 3 层模型(如 MySQL)。关于向用户公开的决定归结为您是否可以使用 CouchDB 的用户和身份验证模型。这要么是救命稻草(如果您的应用适合该模型),要么是破坏交易(如果不适合)
    • 是的,我知道围绕他们的身份验证模型的设计选择。据我所知,这不是一个交易破坏者,但我绝对不会直接向用户公开它。我可能会部署一个 BigCouch 实例。
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2015-01-15
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2012-02-17
    相关资源
    最近更新 更多