Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何安全地存储我的CouchDB管理员密码?_Database_Security_Passwords_Couchdb - Fatal编程技术网

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

Database 如何安全地存储我的CouchDB管理员密码?,database,security,passwords,couchdb,Database,Security,Passwords,Couchdb,昨天我花了很长时间为我的CouchDB实例进行配置,以便创建一个小应用程序,让CouchDB为我管理身份验证和授权 所以我最终得到了这样的结果: 最重要的是,我有一个服务器管理员,他在我的CouchBD实例中基本上是上帝 然后,我创建了一个名为“mydatabase”(例如)的数据库,并添加了“mydatabase\u dba”角色作为admin,以及“mydatabase\u user”角色作为reader 我还创建了一个名为“_users”的数据库,其中包含所有数据库管理员和用户及其角色,还

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

所以我最终得到了这样的结果:

最重要的是,我有一个服务器管理员,他在我的CouchBD实例中基本上是上帝

然后,我创建了一个名为“mydatabase”(例如)的数据库,并添加了“mydatabase\u dba”角色作为admin,以及“mydatabase\u user”角色作为reader

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

只有服务器管理员是这个数据库的管理员,我添加了角色为“mydatabase_dba”的用户作为读卡器。然后,对于那些了解它的人,我修改了“\u auth”文档的“validate\u doc\u update”字段,以便角色为“mydatabase\u dba”的用户只能处理角色为“mydatabase\u user”的用户

因此,总结一下:

  • 服务器管理员仍然是上帝
  • 角色为“mydatabase\u user”的用户可以连接到“mydatabase”,但他们只是阅读器
  • 角色为“mydatabase_dba”的用户是“mydatabase”的管理员
  • 角色为“mydatabase\u dba”的用户可以连接到作为读卡器的数据库“\u users”
  • 角色为“mydatabase\u dba”的用户只能管理“\u users”中角色为“mydatabase\u user”的用户
希望这是清楚的:D

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

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

因为只有角色为“mydatabase\u dba”的用户才能访问“\u users”数据库并处理角色为“mydatabase\u users”的用户,所以我需要在某个时候作为此db管理员连接到CouchDB

我有两个解决方案:

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

  • 再编写一些代码,让应用程序自动执行,这是我更喜欢的解决方案,但问题是:我必须存储管理员凭据
对不起,我的介绍太长了,但我必须先描述一下风景:)

我昨天写了一篇帖子,内容是关于如何保护我的应用程序和CouchDB实例之间的连接:

我给出的解决方案是使用HTTP over SSL(/TLS)来保护通信。我同意,但现在我有另一个顾虑,也许我有点偏执,但因为我的应用程序需要以“mydatabase_dba”的身份连接,所以我必须将其凭据存储在某个地方


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

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


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

+1。我冒昧地添加了一个提醒,不要在任何地方检查此类文件。请您明确说明管理员需要执行哪些任务?如果您更详细地解释需求,也许可以这样做。谢谢理想情况下,管理员只用于创建和管理“\u用户”数据库中角色为“mydatabase\u user”的用户。然后,这些用户将能够使用“mydatabase”。我可以将其从“mydatabase”的管理员列表中删除,这样只有用户才能访问它,但如果攻击者获得其凭据,即使他无法访问“mydatabase”,他仍然可以搞乱其所有用户。。。