我昨天花了很长时间配置我的CouchDB实例,以便创建一个小应用程序,并让CouchDB为我管理身份验证和授权。
所以我最终得到了类似的东西:
除了我所拥有的服务器管理员之外,我的CouchBD实例基本上都是上帝。
然后我创建了一个名为“mydatabase”的数据库(例如),并将角色“mydatabase_dba”添加为admin,并将角色“mydatabase_user”添加为读者。
我还创建了一个名为“_users”的数据库,其中包含所有数据库管理员和用户及其角色,以及一个名为“_auth”的设计文档,用于管理授权。
只有服务器管理员才是此数据库的管理员,我添加了角色为“mydatabase_dba”的用户作为读者。然后,对于那些了解它的人,我修改了“_auth”文档中的“validate_doc_update”字段,以便具有角色“mydatabase_dba”的用户只能处理角色为“mydatabase_user”的用户。
所以,总结一下:
希望这很清楚:D
我现在可以做的是创建一个不会自行管理用户的应用程序,但让用户直接(透明地)连接到CouchDB。
当它处理用户创建/更新/删除时会出现问题。
因为只有角色为“mydatabase_dba”的用户才能访问“_users”数据库并使用角色为“mydatabase_user”的用户,所以我需要在某个时候以此数据库管理员身份连接到CouchDB。
我有两个解决方案:
或
很抱歉很长时间的介绍,但我必须首先描述景观:)
昨天我创建了一篇关于如何保护我的应用与CouchDB实例之间的连接的帖子:here
我给出的解决方案是使用HTTP over SSL(/ TLS)来保护通信。我没关系,但现在我有另一个问题,也许我是偏执狂,但因为我的应用程序需要连接为“mydatabase_dba”,我必须将其凭据存储在某处。
但如何安全地存放它们?正如我在上一篇文章中所说,即使我存储了哈希密码而不是纯文本密码,如果攻击者访问我的应用程序源代码,他也会拥有我的管理员凭据......
答案 0 :(得分:5)
应用程序永远不应具有管理权限。它应该只有它需要运行的最小权限。如果应用程序需要一些管理权限,请确保它具有尽可能少的权限。除此之外,大多数情况下,这些凭证以纯文本形式存储在只有您的应用程序可以访问的文件中。
永远不要将此文本文件提交到源代码管理器(Subversion,Git等)!将文件放入正在运行的系统中必须是安装过程中的一个步骤。