【问题标题】:How to securely store my CouchDB admin password?如何安全地存储我的 CouchDB 管理员密码?
【发布时间】:2011-07-03 17:10:05
【问题描述】:

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

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

除此之外,我还有一个服务器管理员,他基本上是我的 CouchBD 实例的上帝。

然后我创建了一个名为“mydatabase”的数据库(例如),并将角色“mydatabase_dba”添加为管理员,并将角色“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”的身份连接,所以我必须将其凭据存储在某个地方。

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

【问题讨论】:

  • 能否请您明确说明管理员需要执行哪些类型的任务?如果您更详细地解释要求,也许可以做到。谢谢!
  • 理想情况下,管理员仅用于在“_users”数据库中创建和管理角色为“mydatabase_user”的用户。然后这些用户将能够使用“mydatabase”。我可以将它从“mydatabase”的管理员列表中删除,这样只有用户才能访问它,但是如果攻击者获得了它的凭据,即使他无法访问“mydatabase”,他仍然可以搞乱它的所有用户......

标签: database security passwords couchdb


【解决方案1】:

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

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

【讨论】:

  • +1。我冒昧地添加了一个提醒,不要在任何地方检查那种文件。
猜你喜欢
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2016-04-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
相关资源
最近更新 更多