【问题标题】:Where do you store database passwords?你在哪里存储数据库密码?
【发布时间】:2011-06-21 00:20:38
【问题描述】:

有哪些方法可以从您的代码中获取数据库和其他服务密码?我已经阅读了有关使用每个服务器属性文件的信息,但是当您拥有大量服务器时,它变得难以维护。我还看到了使用 CI 的构建过程来“注入”密码的解决方案,但这使得即时更新密码变得困难。

一些有助于缩小答案范围的要求...

  1. 密码应易于更改和传播,以防出现安全漏洞。
  2. 密码不能出现在代码中(由于第 1 点)
  3. 人类获得密码的纯文本版本应该是“不平凡的”
  4. 应该在 Web 应用程序和独立应用程序中运行良好
  5. 从应用程序开发人员的角度易于采用

一些优点包括不引入单点故障、快速的开发时间和易于理解。

这在精神上与this question 相似,但强调可维护性并更多地关注服务器端案例。

【问题讨论】:

  • 把它存入数据库怎么样? :)
  • @Joe:这实际上是一个有目的的解决方案,但密码来统治他们的想法结束了这场谈话。
  • 至少你只需要记住一个密码。您可以将其刻录在 CD 上并存放在保险箱中。您只需要记住安全组合即可。 :)
  • @Golez:不是每个应用程序都必须知道主密码或访问密码表才能知道要使用的密码吗?你可以在那里进入一些循环逻辑。
  • 我想我已经是了。 ;-) 但正如我在下面的回答中所说,我认为您无法完全保护此密码。应用程序必须知道它,如果它是加密的,应用程序必须能够解密它。最好的保护方法是,把它放在一个没有人从外面接触到它的地方。当有人设法获得您的物理服务器时,他们可以访问该文件这一事实将是您遇到的最少问题。 :)

标签: java security password-protection


【解决方案1】:

您可以将其以纯文本形式存储在受保护目录中的文件中,该目录只能由运行应用程序的帐户读取。对于 Web 应用程序,您应该始终将密码存储在 Web 根文件夹之外。

【讨论】:

  • 好吧,我想支持你的答案,但系统告诉我我已经投票了(错误?)。感谢您的输入。
  • 也许你不小心也投了反对票?不过,它现在应该可以工作了。
【解决方案2】:

如果您使用数据库连接池,则用户名、密码和其他数据库详细信息通常在 Java Web 容器中进行管理,并作为数据源提供给 Java 代码。您只需请求数据库连接,无需了解任何这些详细信息。

【讨论】:

  • 我们确实使用容器连接池,这就是我包含“和其他服务密码”的原因,因为我们也有这些。在 java 独立的情况下,我们没有一个很好的容器来为我们处理数据池。
  • 我不认为连接池仅限于 Web/应用程序服务器 - 我相信它们在独立代码中也能正常工作。
  • 正确,但在应用程序服务器之外,配置通常位于应用程序内部(请证明我错了)。还有“其他服务”(想想 FTP)这个悬而未决的问题
  • 我不确定,但我会认为在调用池时配置只是“指向”(有很多实现)。但是从概念上讲,这仍然在应用程序内部,因此它可能不符合您的要求。至于“其他服务”,我不知道,抱歉。
【解决方案3】:

除了将其存储在 web 根目录之外的文本文件中之外,使用加密怎么样?对于大多数语言,使用加密方法非常简单,尽管可能不是绝对需要保护免受 Web 攻击,但它使其他可能访问您系统上的文件的人更加困难。此外,稍微混淆一下,将文件伪装成其他名称很可能会被忽略的无聊名称,即使有人可以物理访问服务器,也不太可能找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2011-08-02
    • 2013-10-22
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多