【问题标题】:CouchDB Authorization Logic?CouchDB 授权逻辑?
【发布时间】:2012-05-09 01:00:14
【问题描述】:

我确实读过http://guide.couchdb.org/draft/security.html

和上一个问题 CouchDB Authorization on a Per-Database Basishttp://wiki.apache.org/couchdb/Security_Features_Overview

我目前正在使用 Apache CouchDB 1.2.0 并通过蒲团添加管理结果 例如在 _users 添加用户

_id
org.couchdb.user:stackoverflow
 _rev 
1-b9f223532b662d4ac52d14082d81e6a5

name
stackoverflow

password
null

roles
[ ]

type
user

所以第一个问题是为什么将管理员添加为类型用户而不是管理员令人费解。该用户是管理员,因为他们可以在任何数据库中执行任何操作,并且角色为空,但我确实使用 _users 文档保护了

["admin"]

作为唯一成员和管理员的角色可以访问它(即使他们在 _users 文档中的角色为空)。

此保护不允许创建新的“普通”用户,因此蒲团“注册”命令将返回注册错误:您无权访问此数据库。

我认为这种设置是唯一合乎逻辑的设置。为什么您希望任何人都能够在您的数据库上创建用户??

即使您将数据库中的读取权限指定为仅适用于一个管理员,每个管理员都可以访问它

(

 " admins" : {
   "names" : ["guru"],
   "roles" : ["boss"]
  },
  "readers" : {
    "names" : ["guru"],
   "roles" : ["boss"]
  }
}

上面的例子对新创建的stackoverflow admin没有影响。

所以我的假设是,通过 futon 创建的管理员可以做任何事情。唯一令人困惑的逻辑部分是 _users 文档,它们没有特殊类型(他们是用户)也没有特殊角色。

回到具体问题: - 当通过蒲团添加管理员时,为什么它没有在 _users 文档中标记为管理员,以及该文档中的 CouchDB 如何确定它是一个广泛的系统管理员? - 如果您想创建一个普通用户而不允许他们注册(通过被褥或直接 HTTP 请求),您必须保护 _users 文档。但是,您将如何创建自己的用户以在自己的数据库上读/写? - 由于用户(根据 CouchDB Docs)将拥有数据库的读/写权限,但没有创建设计文档的可能性,因为任何使用数据库开发的人都需要视图,他如何才能真正有效地使用它?

应该可以在不危及安全性的情况下进行正常的、简单的多主机托管,因为http://www.iriscouch.com/ 提供了共享的 CouchDB 产品,所以我只是不明白您在用户拥有自己的情况下构建简单服务的逻辑有多合理数据库,并且可以做任何事情,但只是在这个数据库上。由于管理员角色无论如何都是“用户”,您如何将它们与 _users 表中的非管理员区分开来?

【问题讨论】:

    标签: couchdb couchdb-futon


    【解决方案1】:

    为什么添加的管理员是普通用户而不是管理员?

    CouchDB 类似于 Windows 的 Active Directory,或 Unix NIS 和 LDAP:大多数用户都有“普通”帐户,但是 admin 帐户(例如 Windows“Administrator”或 Unix“root”)有使用普通的会计系统,而是使用更简单的系统(local.ini 配置文件)。

    如果账户和身份验证系统出现问题,您仍然可以以管理员身份登录并修复它。

    我需要为用户添加“_admin”角色吗?

    不,管理员角色(角色"_admin")不是来自用户的文档,而只是来自“管理员”部分中的配置。

    为什么所有管理员都可以读取数据库?

    通过在全局配置中创建管理员(编辑local.ini 文件,或使用Futon 的“配置”选项卡,或单击管理方中的“修复此”链接),您创建了一个系统强>管理员。系统管理员始终可以访问所有数据(类似于 Windows 管理员和 Unix root)。

    CouchDB 支持普通用户的数据库管理员。这些用户仅具有对数据库的管理员访问权限,而不是对其他任何内容(例如其他数据库或服务器配置)的管理员访问权限。通过将用户名或角色添加到“管理员”列表,可以在“安全”部分设置数据库管理员。

    具体问题: - 通过蒲团添加管理员时,为什么在 _users 文档中未将其标记为管理员,以及该文档中的 CouchDB 如何确定它是一个广泛的系统管理员?

    通过 Futon 添加管理员时,会发生两件事

    1. 创建了一个普通用户(实际上没有有效密码)
    2. 相同用户名被添加到系统配置“管理员”部分。获取/_config/admins/the_username 以查看它。 (这就是 Futon 的配置选项卡的作用。)

    换句话说,CouchDB 不知道它是来自 document 的广泛系统管理员,而是来自配置。如果您删除该配置条目,则该用户将“降级”回普通用户。

    关于 Iris Couch 的旁注

    一开始可能会有些困惑,但是一旦您学会了 CouchDB 用户和安全系统,它就会非常简单且功能强大。但是每个 Iris Couch 用户都有完整的 CouchDB 服务器。如果您注册,您在 Iris Couch 上有一个帐户,但您有一个完整的 CouchDB 服务器可供使用。 在该服务器中,您可以为自己的应用程序创建多个用户。

    【讨论】:

    • 我补充一点:在 Futon 中工作时,打开浏览器的控制台,查看 Futon 发出的 HTTP 请求会非常有用。
    • 谢谢杰森。 Iris Couch 是否决定提供一个 while CouchDB 服务器以简化与授权/数据库方法并允许用户制作更多数据库?您是否为每个用户运行一个 CouchDB 实例?
    • 目标是尽可能提供 100%“正统”的 Apache CouchDB 体验。这是我们的目标,但不是唯一的方法。 Cloudant 提供了一种数据服务,这是他们对 CouchDB 的看法,具有不同的(而且令人着迷!)重点。此外,还有cloudno.de,它以非常实用的方式捆绑了 CouchDB,一个用于 Node.js 应用程序的数据库,只是大型开发体验中的一小部分。
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2021-10-14
    • 1970-01-01
    • 2014-08-11
    • 2021-02-14
    相关资源
    最近更新 更多