如何安全存储我的CouchDB管理员密码?

时间:2011-02-24 16:35:33

标签: database security passwords couchdb

我昨天花了很长时间配置我的CouchDB实例,以便创建一个小应用程序,并让CouchDB为我管理身份验证和授权。

所以我最终得到了类似的东西:

除了我所拥有的服务器管理员之外,我的CouchBD实例基本上都是上帝。

然后我创建了一个名为“mydatabase”的数据库(例如),并将角色“mydatabase_dba”添加为admin,并将角色“mydatabase_user”添加为读者。

我还创建了一个名为“_users”的数据库,其中包含所有数据库管理员和用户及其角色,以及一个名为“_auth”的设计文档,用于管理授权。

只有服务器管理员才是此数据库的管理员,我添加了角色为“mydatabase_dba”的用户作为读者。然后,对于那些了解它的人,我修改了“_auth”文档中的“validate_doc_update”字段,以便具有角色“mydatabase_dba”的用户只能处理角色为“mydatabase_user”的用户。

所以,总结一下:

  • 服务器管理员仍是上帝
  • 角色为“mydatabase_user”的用户可以连接到“mydatabase”,但他们只是读者
  • 角色为“mydatabase_dba”的用户是“mydatabase”的管理员
  • 角色为“mydatabase_dba”的用户可以连接到他们是读者的数据库“_users”
  • 角色为“mydatabase_dba”的用户只能管理“_users”中角色“mydatabase_user”的用户

希望这很清楚:D

我现在可以做的是创建一个不会自行管理用户的应用程序,但让用户直接(透明地)连接到CouchDB。

当它处理用户创建/更新/删除时会出现问题。

因为只有角色为“mydatabase_dba”的用户才能访问“_users”数据库并使用角色为“mydatabase_user”的用户,所以我需要在某个时候以此数据库管理员身份连接到CouchDB。

我有两个解决方案:

  • 在我的应用中创建一个用户界面,让管理员连接并执行他必须执行的操作

  • 制作更多代码并让应用程序自动执行,这是我更喜欢的解决方案,但问题是:我必须存储管理员凭据......

很抱歉很长时间的介绍,但我必须首先描述景观:)

昨天我创建了一篇关于如何保护我的应用与CouchDB实例之间的连接的帖子:here

我给出的解决方案是使用HTTP over SSL(/ TLS)来保护通信。我没关系,但现在我有另一个问题,也许我是偏执狂,但因为我的应用程序需要连接为“mydatabase_dba”,我必须将其凭据存储在某处。

但如何安全地存放它们?正如我在上一篇文章中所说,即使我存储了哈希密码而不是纯文本密码,如果攻击者访问我的应用程序源代码,他也会拥有我的管理员凭据......

1 个答案:

答案 0 :(得分:5)

应用程序永远不应具有管理权限。它应该只有它需要运行的最小权限。如果应用程序需要一些管理权限,请确保它具有尽可能少的权限。除此之外,大多数情况下,这些凭证以纯文本形式存储在只有您的应用程序可以访问的文件中。

永远不要将此文本文件提交到源代码管理器(Subversion,Git等)!将文件放入正在运行的系统中必须是安装过程中的一个步骤。