我读过http://guide.couchdb.org/draft/security.html和
和上一个问题 CouchDB Authorization on a Per-Database Basis 和 http://wiki.apache.org/couchdb/Security_Features_Overview
我目前正在使用Apache CouchDB 1.2.0并通过futon添加管理结果 在_users添加用户,例如
_id
org.couchdb.user:stackoverflow
_rev
1-b9f223532b662d4ac52d14082d81e6a5
name
stackoverflow
password
null
roles
[ ]
type
user
所以第一个问题是为什么管理员被添加为类型用户而不是管理员令人费解。这个用户是管理员,因为他们可以在任何数据库中执行任何操作,并且角色为空但我确实使用
保护_users文档["admin"]
角色作为唯一成员,只有管理员可以访问它(即使他们在_users文档中的角色为空)。
此保护不允许创建新的“普通”用户,因此futon“signup”命令将返回注册错误:您无权访问此数据库。
我认为这种设置是唯一合乎逻辑的设置。为什么你希望任何人能够在你的数据库上创建用户?
即使您在数据库中指定读访问权限仅适用于一个管理员,每个管理员都可以访问它
(
" admins" : {
"names" : ["guru"],
"roles" : ["boss"]
},
"readers" : {
"names" : ["guru"],
"roles" : ["boss"]
}
}
上述情况对新创建的stackoverflow管理员没有影响,如上例所示。
所以我的假设是,通过蒲团创建的管理员可以做任何事情,无论如何。唯一令人困惑的逻辑部分是_users文档,它们没有特殊类型(它们是用户),也没有特殊角色。
回到具体问题: - 当通过蒲团添加管理员时,为什么它在_users文档中没有标记为管理员?来自该文档的CouchDB如何确定它是一个广泛的系统管理员? - 如果您想创建一个普通用户而不允许他们注册(通过蒲团或直接HTTP请求),您必须保护_users文档。然而,您将如何创建自己的用户来读取/写入自己的数据库? - 由于用户(根据CouchDB Docs)将拥有数据库的读/写权限但不能创建设计文档的可能性如何才能真正有效地使用它,因为任何使用数据库开发的人都需要视图?
在http://www.iriscouch.com/有一个共享的CouchDB产品应该可以有一个正常的,简单的多主机而不会危及安全性所以我只是不明白你在逻辑上如何构建一个用户拥有的简单服务他自己的数据库,可以任何,但只能在这个数据库上。由于管理员角色无论如何“用户”如何将它们与_users表中的非管理员区分开来?
答案 0 :(得分:8)
CouchDB类似于Windows的Active Directory,或Unix NIS和LDAP:大多数用户拥有“普通”帐户,但 admin帐户(例如Windows“Administrator”或Unix“root”) 不使用正常的会计系统,而是一个更简单的系统(local.ini
配置文件)。
如果帐户和身份验证系统出现问题,您仍然可以以管理员身份登录并进行修复。
不,管理员角色(角色"_admin"
)不是来自用户的文档,而是来自配置,位于“管理员”部分。
通过在全局配置中创建管理员(编辑local.ini
文件,或使用Futon的“配置”标签,或点击管理员方面的“修复此”链接),您创建了一个系统管理员。系统管理员始终可以访问所有数据(类似于Windows Administrator和Unix root)。
CouchDB支持普通用户数据库管理员。这些用户只能访问数据库,而不能访问任何其他数据库,例如其他数据库或服务器配置。通过在“管理员”列表中添加用户名或角色,可以在“安全”部分设置数据库管理员。
通过Futon添加管理员时,会发生两件事
/_config/admins/the_username
可以看到它。 (这就是Futon的配置标签。)换句话说,CouchDB不知道它是来自文档的广泛系统管理员,而是来自配置。如果删除该配置条目,则用户将“降级”回普通用户。
起初可能有点令人困惑,但是一旦你学会了CouchDB用户和安全系统就非常简单和强大。但每个Iris Couch 用户都有完整的CouchDB 服务器。如果您注册,您在Iris Couch有一个帐户,但您有一个完整的CouchDB服务器可供使用。 在该服务器中,您可以为自己的应用程序创建多个用户。