如何安全地存储数据库连接细节

6

在需要打开数据库连接的应用程序中,必须将用户名/密码详细信息发送到数据库。存储和使用这些数据的最安全方式是什么?


请详细说明您的问题。是关于Web/C#/Java等方面的问题吗? - Chad Grant
嗨,Deviant。我试图保持问题的普遍性,因为我认为这是一个普遍性问题。不过,如果每个人都认为不同,我会添加更多细节 - 它确实涉及Web应用程序。 - Bobby Jack
你是在防御谁?你的分发方式是什么?这是一个客户端应用程序与中央数据库通信吗?还是一个Web应用程序?你使用哪种编程语言和数据库?提供更多细节将会得到更具体的答案。 - David Waters
这不是一个通用的问题,不幸的是。 - Chad Grant
我不确定 - 我认为“1800信息”的回答是一个好的、普遍的回应 - 是否有某种方式,建议会因特定条件而有所不同? - Bobby Jack
4个回答

4
具体方法取决于环境,但通常情况下,您需要将凭据存储在仅由应用程序运行用户可读取的位置。例如,在Windows上,您可以将凭据存储在受ACL保护的注册表中,以便只有该用户才能读取它。可选地,您可以使用DPAPI对数据进行加密,以进一步保护其安全。在Unix上,您需要将其存储在一个文件中,并使用chmod进行保护(可选地进行加密),以便只有应用程序可以读取它。

2

这取决于您使用的数据库。对于Microsoft SQL Server,您可以在配置中加密数据库连接字符串,或者使用集成安全性,在该安全性下,您使用从连接的应用程序的身份连接到数据库。


2
优秀的问题。 这是我们一直在努力解决的问题,并且想出了各种方法。
第一个答案是采用1800 INFORMATION的建议: 将其放在仅由运行应用程序的用户ID可读取的区域中。
我认为你不会得到比这更好的全面解决方案。
我们尝试过其他方法(并予以拒绝):
- 将其保存在加密文件中 - 如果攻击者无法访问您的代码以查看加密工作方式,则此方法仅在大多数情况下有效。 - 将其保存在数据库中,并要求人类登录以启动应用程序 - 只要您有一个真实的人员始终启动应用程序,这个方法就可以奏效。 - 依赖内置安全设备,例如.NET中的设备(请参见rwwilden的答案)。 - 如果您是Microsoft商店,这是一个很好的解决方案。

0

将其放在应用程序读取的单独文件中,而不是源代码中。然后使用系统安全性使此文件仅可被应用程序用户读取。


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