Tom*_*mas 11 authentication couchdb
我正在考虑在CouchDB中移植一个网站,它看起来很有趣.
但是,一个很大的问题是CouchDB似乎不支持读取身份验证; 所有读者都可以访问数据库中的所有文档.
在其他地方建议为不同的读者组使用不同的数据库或在另一个(中间)层实现读者身份验证,这两个都不是这个项目的选项,其中访问由复杂的每个文档ACL确定.
我正在考虑在列表中实现身份验证,并将对CouchDb的所有访问限制为这些列表.这种限制可以通过Apache中用作反向代理的简单mod_rewrite子句来强制执行.列表将简单地获取行并检查userCtx对文档的ACL.就像是:
function(head, req) {
var row;
while (row = getRow()) {
if (row.value.ACL[req.userCtx.name])
send(row.value);
else
throw({unauthorized : "You are not allowed to access this resource"});
}
Run Code Online (Sandbox Code Playgroud)
由于我没有使用CouchDB的经验,而且我没有在任何地方阅读过这种方法,我想知道这种方法是否可行.
这是实现读取访问的方式还是我为了错误的目的而滥用列表?我不应该期望使用CouchDB可以实现这么简单的解决方案吗?
Apache mod_rewrite是一个中间层,所以当你说中间层不是一个选项时,你不清楚你的意思.
基于couchdb中的数据实现安全策略是完全正常的.但是,成本是您负责实施的正确性.它没有听起来那么糟糕.请记住,人们长期以来一直在使用MySQL网络应用程序.
需要记住的是,CouchDB不支持文档级读取权限,因为跟踪这些权限是不切实际的,因为数据会编织所有地图并减少视图.例如,假设我们有一个竞标系统.
换句话说,如果要包装CouchDB API,则至少需要将那些允许的查询列入白名单.请记住,vhost和重写规则在CouchDB中运行,因此仅仅查看传入的查询可能是不够的.
希望这能说明为什么读控制在数据库级别.
我不确定使用列表是限制对资源的访问的最佳选择,因为列表是用于以特定格式(RSS、CSV、配置文件、HTML...)呈现视图输出的函数。
\n\n您是否考虑过使用包含用户及其权限的文档?我发现Kore Nordmann 发表的一篇文章解释了如何将传统的用户/组/权限从关系数据库转换为 CouchDB 模型:
\n\n
根据其权限,用户只能访问一组已定义的视图。
\n\nCouchDB 提供验证函数,但仅在创建或更新文档时才会调用它们。O \xe2\x80\x99Reilly 书中指出“身份验证系统是可插入的,因此您可以与现有服务集成,以使用 http 层、LDAP 集成或其他方式对 CouchDB 的用户进行身份验证”。但由于您提到中间层不是一个选项,因此该列表可能是一个临时解决方案,直到 CouchDB 添加更多身份验证支持。
\n| 归档时间: |
|
| 查看次数: |
3549 次 |
| 最近记录: |