在启动脚本/配置文件中存储数据库密码的最佳方法?

时间:2008-08-14 06:10:25

标签: sql-server security passwords

因此我们的Web服务器应用程序需要连接到数据库,而其他一些应用程序具有在启动时执行的启动脚本。

根据

,存储这些应用程序的名称/密码的最佳方法是什么?
  • 安全,例如也许我们不希望系统管理员知道数据库密码
  • 可维护性,例如使密码更改时容易更改配置等

Windows和Linux解决方案都很受欢迎!

7 个答案:

答案 0 :(得分:10)

保护密码的最佳方法是停止使用密码。使用可信连接: How To: Connect to SQL Server Using Windows Authentication in ASP.NET 2.0。 然后你没有什么可隐藏的 - 将你的web.config和源发布到世界,他们仍然无法访问你的数据库。

如果这不适合您,请使用内置的configuration encryption system in ASP.NET

答案 1 :(得分:5)

PostgreSQL在他们的文档中为这种情况提供nice solution。实质上,您使用ssh将计算机上的端口桥接到远程计算机上的PostgreSQL服务器端口。这有三个阶段的身份验证:

  1. 限制对本地端口的访问,例如只允许特定用户连接到该端口。
  2. 使用ssh作为特定用户设置与PostgreSQL主机的无密码连接。
  3. 允许用户ssh连接,以便在没有密码的情况下对PostgreSQL进行本地访问。
  4. 这降低了您的用户帐户是否受到保护以及您的ssh配置是否合理以及您无需在任何地方存储密码的安全性。

    编辑:我应该补充说,这适用于任何侦听TCP / IP端口的数据库。它恰好在PostgreSQL中描述。并且您将需要iptables(或等效的Linux)来执行端口限制。请参阅this

答案 2 :(得分:3)

我同意lomaxx:如果有人已经在服务器上或者有广泛的访问权限(比如系统管理员),那么游戏就已经结束了。因此,我们的想法是使用您信任的服务器,它确保您想要的程度。具体做法是:

  • 您需要信任系统管理员
  • 您需要信任在同一服务器上运行代码的任何其他人(这就是为什么共享主机对我来说是一个很大的禁忌)

除此之外,环境变量似乎是存储这些类型凭据的流行选择,因为这意味着仅访问源(例如通过破坏开发框)不会直接显示它,也可能是很好地为每个服务器本地化(开发,测试等)。

答案 3 :(得分:1)

在大多数情况下,我认为在纯文本文件中混淆密码就足够了(例如使用base64)。您无法完全保护存储的密码免受具有root访问权限的已确定的系统管理员的影响,因此实际上并不需要尝试。但是,简单的混淆可以防止意外泄露肩膀冲浪者的密码。

更复杂的替代方案是设置专用的安全密码服务器:

  • 提供密码解密服务
  • 实际存储密码以供其他不太安全的服务器使用

根据所使用的网络协议,这可能无法防止使用tcpdump的恶意系统管理员。并且它可能无法使用调试器来保护已确定的系统管理员。那时,可能是时候看看Kerberos门票了。

答案 4 :(得分:1)

纯文字?如果它们在您的服务器上,我希望服务器足够安全,不允许未经授权的访问。如果人们可以访问服务器上的配置文件,那么早就出现了问题。

答案 5 :(得分:1)

澄清:在安全性,可维护性方面(例如,如果登录需要更改,我可以在以后找到,等等)

@lomax:也许我可能不希望每个有权访问物理服务器的人(例如系统管理员)都能看到密码。

谢谢!

答案 6 :(得分:0)

您可以将对称加密密钥烘焙到二进制文件中,并让该二进制文件在启动时从磁盘上的文件中读取加密的用户名/密码。

但是,这不仅仅是混淆,因为您的代码很可能存储在某个源存储库中。

我建议您更好地控制使用防火墙和专用网络泡影在物理上和通过网络访问服务器,并将密码以明文(或base-64编码)存储在磁盘上权限锁定到您的Web应用程序的运行用户。

您还可以锁定数据库服务器,以便仅通过IP接受来自您的Web应用程序计算机的连接。

最终,您的问题是密钥(您的数据库用户名/密码对)需要可供您的网络应用程序无人值守地使用。