如何简化对_users数据库的CouchDB读/写限制

时间:2014-10-11 12:44:09

标签: security couchdb

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

1适用于应用程序数据 2是" _users"数据库中。

在我的应用程序中我在一种形式中试图实现自动完成,其中数据源是"视图"在" _users"中创建数据库。

现在,当我使用除admin之外的普通用户ID登录时。在尝试访问内部视图时使用" _users"数据库我得到的错误403是:

{"错误":"禁止","原因":"只有管理员可以访问系统数据库的设计文档操作。" }

我是否可以仅允许非管理员用户访问并限制该访问权限?所以我可以将_users数据库中的用户列表添加到我的应用程序中。

1 个答案:

答案 0 :(得分:1)

我从来没有能够做很多需要CouchDB自定义的任务。我总是需要一个其他地方的脚本给我提供我需要的信息。

对我来说有用的是这个设置:

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

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

<强>更新

纯粹的客户端/ JavaScript解决方案意味着它在某些方面基本上是不安全的,因为一切都在客户端。但也许您的应用程序不需要 安全。这取决于你。

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

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

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