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

时间:2012-04-17 12:32:16

标签: java mysql security passwords

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

常见的解决方案是将凭证放在配置文件中。但是,我不希望受感染的服务器意味着黑客可以访问数据库(托管在单独的服务器上)。

我可以在环境中存储凭据,但这只是通过默默无闻的安全性。 Evil先生可以在环境中找到它。

有人建议加密。但是,如果我将密钥存储在可执行文件中,快速解编译(我们正在使用Java),我仍然注定要失败。

我还希望每次启动服务器时都不必输入释义。

有什么建议吗?我觉得我错过了一些简单的东西。

由于

3 个答案:

答案 0 :(得分:6)

我不认为你错过了一些简单的事情。有问题的服务器可以在没有您帮助的情况下连接到数据库,在这种情况下, 拥有凭据;或者没有你提供它就无法连接。您可以采取各种步骤,例如您列出的步骤,使受攻击的服务器更难以显示数据库的凭据,但是在一天结束时,如果必须拥有这些凭据并将它们提供给DB服务器进行连接,它们必须存储在某个地方 - 或者至少,它必须有一些获取它们的方法,因此在这种意义上是可以破解的。

您最好的选择是尽可能快地找出入侵(受感染的服务器),为最坏的情况保留良好的异地,离线备份,首先为入侵设置很多障碍,等

答案 1 :(得分:3)

我正在分享,就像我解决这个问题一样。

  • 构建API,从外部域查询身份验证详细信息。
  • 使用公钥和私钥来阅读详细信息。

但是,老实说,这样做的唯一原因是过于复杂的简单的事情。之后,我使用不同的权限为数据库创建了几个用户。

喜欢

  • guest只能SELECT
  • mod只能CREATEINSERTUPDATEDELETE
每当出现身份验证的用户时,

等并切换用户。

  

通过用户和会话的组合,到目前为止我已经能够逃脱威胁。但当然,必须彻底测试代码漏洞。

答案 2 :(得分:2)

将其锁定。防止Evil先生获得成功。我知道,这很简单吗?

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

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

  1. 应用程序服务器
  2. 控制台
  3. 因此,为了破坏数据库服务器,他们必须妥协应用程序服务器。

    因此,请锁定应用程序服务器。当然,唯一比受到损害的更糟糕的事情就是妥协而不知道。如果您确实发现了泄密,则需要修复漏洞(如果存在漏洞)。取证在这里很重要(启用日志并监控它们)。您还需要制定恢复计划。

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