如何在同一个CouchDB实例中的许多应用程序的`_users`数据库中处理用户?

时间:2015-10-31 00:41:40

标签: javascript authentication authorization couchdb nosql

根据Matt Woodward的博客,在The Definitive Guide to CouchDB Authentication and Security中,他指出了一些关于CouchDB的事情,我不确定我是完全理解的。

  1. 他说:

    "基本上,CouchDB中安全性的工作方式是用户存储在_users数据库中(如果您愿意,可以存储在其他地方;可以在配置文件中更改)..." 。

  2. 因此,整个CouchDB的所有用户都存储在一个数据库中,对吧?这意味着,如果我在同一个CouchDB中的不同数据库中运行多个应用程序,我必须处理想要访问这两个应用程序的用户,是否正确?

    1. 他也说

      "数据库读者只能读取特定数据库上的文档和视图,并且没有其他权限"。

      然后,他补充说

      "默认情况下,即使您在数据库上定义了数据库管理员,也会为匿名用户启用所有数据库的读/写操作。

    2. 所以匿名用户可以或不可以读取特定数据库中的文档?

1 个答案:

答案 0 :(得分:0)

我首先要说的是,这些文章虽然仍然提供信息,但已有几年的历史,可能已经过时了。如果您正在尝试了解CouchDB,我建议您阅读official documentation

现在回答你的问题。 (有关安全性herehere

的详细信息

在CouchDB中,您可以在开发应用程序时逐步建立安全性。默认设置非常开放,您可以通过添加配置来锁定内容。 (我认为这是一种非常直观的方式)

默认情况下,CouchDB位于" Admin Party"模式,这意味着任何人都可以读写任何东西。 (因为每个用户,包括匿名用户,都被视为管理员)

任何管理员用户添加到您的服务器后(通过配置,而不是p.rightIn, p:nth-child(4), p:nth-child(6) { float: right; margin: 0px 5px; width: auto; } 数据库),该方已结束。这意味着某些操作现在由您明确定义的管理员执行。 (例如创建数据库,设置配置等​​)

在此状态下,匿名用户仍可以在已创建的任何数据库中读取/写入普通文档。 (设计文档只能由管理员修改)如果您已准备好开始锁定单个数据库,则可以通过在给定数据库的security object中指定用户/角色来实现此目的。

当人们使用术语"数据库阅读器"时,他们意味着用户已被添加为"成员"在安全对象中。 (通过用户名或角色)通过在数据库的安全对象中指定任何成员或管理员,只有那些用户在数据库中拥有权限,所有其他用户都将被禁止。

总而言之,匿名用户可以默认读/写任何内容。一旦指定了管理员,安全性就会收紧,某些操作只能由该管理员完成。如果指定数据库成员/管理员,则数据库的安全性会更加严格,只允许这些用户甚至读取数据库。