gpt4 book ai didi

authentication - CouchDb 使用列表读取身份验证

转载 作者:行者123 更新时间:2023-12-04 02:06:21 25 4
gpt4 key购买 nike

我正在考虑在 CouchDB 中移植一个网站,它看起来很有趣。

但是,一个很大的问题是 CouchDB 似乎不支持读取身份验证;所有读者都可以访问数据库中的所有文档。

建议elsewhere为不同的读者组使用不同的数据库或在另一个(中间)层中实现读者身份验证,这两种方法都不是本项目的选项,因为访问由复杂的每个文档 ACL 确定。

我想在列表中实现身份验证并将对 CouchDb 的所有访问限制在这些列表中。这个限制可以通过 Apache 中用作反向代理的简单 mod_rewrite 子句来强制执行。列表将简单地获取行并根据文档的 ACL 检查 userCtx。就像是:

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"});
}

由于我没有使用 CouchDB 的经验,也没有在任何地方阅读过这种方法,我想知道这种方法是否可行。

这是实现读取访问的一种方式还是我滥用列表用于错误目的?我不应该期望 CouchDB 可以实现如此简单的解决方案吗?

最佳答案

Apache mod_rewrite 是一个中间层,所以当你说中间层不是一个选项时,你的意思不清楚。

根据 couchdb 中的数据实现您的安全策略非常好。但是,成本是您负责实现的正确性。这并不像听起来那么糟糕。请记住,人们长期以来一直在使用 MySQL Web 应用程序执行此操作。

需要记住的是,CouchDB 不支持文档级读取权限,因为跟踪这些权限是不切实际的,因为数据会穿过所有 map 并减少 View 。例如,假设我们有一个投标系统。

  • 有两个出价,我的和你的
  • 我有对我的 10 美元出价的阅读权限,但由于中间件政策,我无法阅读您的出价文件
  • 但是,我发现了一个计算所有出价平均值的 View 。平均价格为 7.50 美元。因此,我知道您出价 5 美元,我会将出价降低至 6 美元

  • 换句话说,如果您要包装 CouchDB API,您至少需要将那些允许的查询列入白名单。请记住,虚拟主机和重写规则在 CouchDB 中运行,因此仅查看传入的查询可能还不够。

    希望这能说明为什么读取控制在数据库级别。

    关于authentication - CouchDb 使用列表读取身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531561/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com