存储数据库密码的最佳实践

20

我正在开发一个自定义的服务器应用程序,将访问一个数据库。我需要决定在哪里存储该服务器的凭据(和地址)。

一个常见的解决方案是将凭据放在配置文件中。但是,我不希望受到入侵的服务器意味着黑客可以访问托管在另一台服务器上的DB。

我可以将凭据存储在环境中,但这只是通过混淆来保护安全性。邪恶先生可以查看环境变量找到它。

有人建议使用加密。然而,如果我将密钥存储在可执行文件中,快速反编译(我们正在使用Java),我仍然会遇到问题。

我还想避免每次启动服务器时都要输入密码。

有什么建议吗?感觉我漏掉了一些简单的东西。

谢谢


3
你希望你的应用程序能够访问凭据,但是即使黑客已经获得了该机器的root访问权限,也能够被拒绝访问? - liquorvicar
2
如果您每次启动服务器时都不输入“密码短语”,那么Mr. Evil也不会这样做,这意味着任何可以访问服务器物理位置的人都将能够访问。 - byrondrossos
3个回答

11
我不认为你错过了什么简单的东西。要么涉及的服务器可以在没有你的帮助下连接到数据库,这意味着它必须拥有凭据;要么它不能在没有你提供凭据的情况下连接。你可以采取各种措施,如你列出的那些来使受到攻击的服务器更难泄露数据库凭据,但归根结底,如果它必须拥有并提供这些凭据才能连接到数据库服务器,它们将不得不被存储在某个地方——或者至少,它将必须有一些获取它们的手段,因此在某种意义上是可被黑客攻击的。
你最好的选择是尽快了解入侵(受攻击的服务器)的情况,为最坏的情况保留良好的离线备份,在第一时间设置许多入侵屏障等。

4
我分享一下我是如何解决这个问题的。
  • 构建API,从外部域名查询认证详细信息。
  • 使用公钥和私钥查看详细信息。
但是,说实话,这只是让简单的事情变得更加复杂了。之后,我在数据库中创建了几个具有不同特权的用户。
例如:
  • guest 只能执行 SELECT
  • mod 只能执行 CREATEINSERTUPDATEDELETE
等等,并在出现已认证用户时切换用户。
通过用户和会话的组合,我已经成功地避免了威胁。但是需要彻底测试代码漏洞。

2

锁定它。防止Mr. Evil获得root权限。我知道,很容易对吧?

编写安全的应用程序并将应用服务器锁定。遵循最佳实践,这就是大部分工作了。

在安全环境中设置数据库时,唯一与数据库服务器位于同一物理网络上的服务器是应用服务器。访问数据库服务器有两种方法:

  1. 应用服务器
  2. 控制台

因此,为了妨碍数据库服务器,他们必须破坏应用服务器。

因此,请锁定应用服务器。当然,仅被入侵比被入侵却不知道更糟糕。如果发现漏洞,则需要修复漏洞。在这里,取证非常重要(启用日志并监视它们)。您还需要一个恢复计划。

预防,检测,纠正和恢复至关重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接