【问题标题】:How to create a users database in a couchapp with per user database security model? (per document read access)如何使用每个用户数据库安全模型在 couchapp 中创建用户数据库? (每个文档的读取权限)
【发布时间】:2011-07-23 20:06:09
【问题描述】:

您好,我读到了两种为 couchapps 实现按文档读取访问的方法:

  1. 每个用户都有自己的数据库,其中只包含该用户可以读取的数据。然后所有用户写入主数据库,该数据库使用复制过滤器复制到所有用户数据库,该过滤器决定谁可以读取什么。
  2. 使用列表函数过滤其他视图的输出,并通过代理服务器和白名单限制访问。

我对此有一些疑问:

  1. 是否有更多可能实现文档级别的读取访问权限?

  2. 如何在 couchapp 中创建用户私有数据库?我确实需要管理员权限,但填写我的应用程序注册表单的用户显然没有管理员权限。我是否需要一个中间层(php 等)用于注册过程,以便我可以创建所需的数据库?

  3. 当我最终拥有这个数据库时,我需要使用过滤器开始连续复制。我在某处读到,当服务器重新启动时,此类复制不会恢复。如果服务器崩溃,我是否需要一个 chronjob 每隔 x 小时重新创建这些复制??

  4. 这不是对磁盘空间的巨大浪费吗?对于注册我的应用程序的每个用户,大部分数据都会重复,还是我错了? (特别是如果只有很少的信息不能被别人阅读)

【问题讨论】:

    标签: security couchdb couchapp


    【解决方案1】:

    我已经在我的学士论文中整理了一些读取权限的示例。你可以在这里找到示例代码:https://github.com/Goltergaul/bachelorthesis2---todolist-couchapp

    【讨论】:

      【解决方案2】:
      1. 除了修改 CouchDB 源代码之外,我不知道有其他方法可以立即使用。一种可能性是使用可能有externals API 的主干(或发布时的v1.1)。外部是 CouchDB 会将一些连接转发到的 Web 服务器。

      2. 您需要第三层,但不一定需要中间层。您的外部软件将以管理员身份连接到 CouchDB 并执行待处理的任务。例如,当用户需要一个新数据库时,他们在公共数据库中创建一个文档,然后外部软件将创建数据库,将用户分配为管理员等。非常容易通过查询/_changes?feed=continuous 来做到这一点,因为您可以获得来自用户的实时更新。我更喜欢这个而不是中间层,因为软件更简单(无需额外的 Web 开发,只需 CouchDB GET 和 PUT),它可以崩溃、重启、升级等,而不会对用户造成太大影响。

        李>
      3. 无论如何,cron 作业都不是一个坏主意。嘿,它可能是上面第 2 步中外部处理器的一部分!但是,从 CouchDB 1.1 开始,复制在沙发重启后重启。

      4. 它不应该浪费太多空间。根据您的应用程序,您希望获取共享数据库中的所有共享数据,以及每个用户的私有数据库中的所有私有数据。但即使您有重复的数据,我也不会称其为浪费。与开发人员的工作量或安全问题的无形成本相比,磁盘空间是一笔非常小成本。

      根据您的应用,您在未来有巨大机会使用移动或离线功能。当您发布 iPhone、桌面或离线 web 应用程序时,用户可以在其数据库的本地副本上工作,然后在他们重新在线后与您服务器上的“官方”数据库同步。对于某些应用程序而言,这已成为人们希望在任何情况下使用应用程序的必备功能。

      【讨论】:

      • 感谢您的回答 :) regading 4.:除了“浪费”磁盘空间之外,如果我对我的主数据库进行了多次写入,那么对于必须读取该数据的每个用户,这些写入都会成倍增加。因此,如果我有 1000 个用户,则必须执行 1000 次单次写入。对我来说,这听起来一点也不高效。但我喜欢额外共享数据库的想法,它可以减少此类写入。但它大大增加了客户端所需的逻辑,特别是如果我必须加入必须从两个数据库收集数据的查询结果。
      猜你喜欢
      • 2018-06-21
      • 2011-09-08
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2017-05-25
      • 2010-09-12
      • 2021-08-21
      • 2021-03-07
      相关资源
      最近更新 更多