【问题标题】:How to ease CouchDB read/write restrictions on _users database如何缓解 CouchDB 对 _users 数据库的读/写限制
【发布时间】:2014-12-06 12:46:04
【问题描述】:

在我的 couchapp 中使用了两个数据库

1 用于应用程序数据 2 是“_users”数据库。

在我的应用程序中,我正在尝试实现自动完成功能,其中数据源是在“_users”数据库中创建的“视图”。

现在,当我使用管理员以外的普通用户 ID 登录时。在尝试访问“_users”数据库中的视图时,我收到错误 403,即:

{"error":"forbidden","re​​ason":"只有管理员可以访问系统数据库的设计文档操作。"}

我是否可以只允许和限制非管理员用户访问该视图?所以我可以从 _users 数据库中获取用户列表到我的应用程序中。

【问题讨论】:

    标签: security couchdb


    【解决方案1】:

    我从来没有能够单独使用 CouchDB 完成许多需要大量自定义的任务。我一直需要一个脚本来提供我需要的信息。

    对我有用的是这个设置:

    • 一个对我的 CouchDB 具有管理员访问权限的看门人 Sinatra 应用程序
    • 使用 CouchDB 的配置代理到我的 Sinatra 应用程序。 httpd_global_handlers_my_service{couch_httpd_proxy, handle_proxy_req, <<"http://127.0.0.1:9999">>}

    代理的原因是因为任何通过您的网守的请求都将设置 AuthSession 令牌。在你的网守内部,你可以GETlocalhost:5984/_session 传递 AuthSession cookie,它会告诉你是谁在发出请求,允许你查找他们并查看他们是否有访问权限,或者只是让每个人都可以访问你喜欢的任何内容.代理的另一个原因是避免任何 CORS 废话,因为您正在向 yourserver:5984/_my_service 发出请求。

    更新

    纯粹的客户端/javascript 解决方案意味着它在某些时候根本不安全,因为一切都在客户端。但也许您的应用程序不需要那么 安全。这取决于你。

    一种解决方法可能是让您的应用程序作为预定义管理员进行身份验证,然后以这种方式创建更多管理员用户。您可以在应用程序启动时或根据需要进行一次身份验证。

    “问题”是 CouchDB 认为 _users 数据库从根本上来说是特殊的,并且没有让您有机会像其他数据库一样更改凭据要求。通常您可以使用_security 文档来提供基于角色或基于用户的访问权限。但是_users 是不可能的。

    替代实现可能是跟踪您自己的用户并完全放弃_users 数据库。在这种情况下,您可以设置自己的 cookie 并拥有自己的登录和注销方法,这些方法不依赖于 CouchDB 的身份验证方案。您可以查询自己的_view/users,因为它会在您的主数据库中。事情不会被锁定,但只要没有人对入侵您的系统感兴趣,它们就会正常工作。 :)

    【讨论】:

    • 您好,谢谢您的帮助。在我的应用程序的另一部分,我也面临着 CROS 问题 :)。但是我只能在 Jquery couchdb 插件中使用 couchdb。它不能是任何仅使用 couchDB 的解决方案吗?
    猜你喜欢
    • 2011-07-22
    • 2021-12-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2020-12-24
    • 2016-03-01
    相关资源
    最近更新 更多