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

Java 存储数据库密码的最佳实践,java,mysql,security,passwords,Java,Mysql,Security,Passwords,我正在开发一个可以访问数据库的自定义服务器应用程序。我需要决定将凭据(和地址)存储到该服务器的何处 一种常见的解决方案是将凭证放入配置文件中。但是,我不希望服务器受损意味着黑客可以访问数据库(数据库托管在单独的服务器上) 我可以将凭据存储在环境中,但这只是通过隐蔽性实现的安全性。邪恶先生只要看看周围的环境就能找到它 有人建议加密。然而,如果我将密钥存储在可执行文件中,快速反编译(我们使用的是Java),我仍然注定要失败 我还希望避免每次启动服务器时都必须输入一个解释 有什么建议吗?我觉得我错过了

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

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

我可以将凭据存储在环境中,但这只是通过隐蔽性实现的安全性。邪恶先生只要看看周围的环境就能找到它

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

我还希望避免每次启动服务器时都必须输入一个解释

有什么建议吗?我觉得我错过了一些简单的事情


谢谢

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


你最好的办法是尽快发现入侵(受损服务器),在最坏的情况下保持良好的非现场、离线备份,在第一时间设置大量入侵屏障,等等。

我正在分享我解决这一问题的方法

  • 构建API,以从外部域查询身份验证详细信息
  • 使用公钥和私钥阅读详细信息
但是,老实说,这只会使简单的事情变得过于复杂。之后,我创建了多个数据库用户,具有不同的权限

  • guest
    只能选择
  • mod
    只能
    创建
    插入
    更新
    删除
etc并在出现经过身份验证的用户时切换用户

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


把它锁上。阻止邪恶先生生根。我知道,很简单,对吧

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

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

  • 应用服务器
  • 控制台
  • 因此,为了破坏数据库服务器,他们必须破坏应用服务器

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


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

    因此,您希望您的应用程序能够访问凭据,但拥有该计算机root访问权限的黑客将被拒绝访问?如果您每次启动服务器时都不输入密码,那么邪恶先生也不会这样做,这意味着任何可以访问服务器物理位置的人都可以访问。