0

情况如下:我们有一个通用库,它可以从我们设置的中央配置存储中检索数据库连接详细信息。每个应用程序在使用数据库时都使用这个库。

基本上,它将调用一个存储过程并说“我是 {xyz} 应用程序,我需要连接 o”,它将返回该应用程序主数据库(服务器、实例、数据库、用户和密码)的连接详细信息。

如何将其锁定,以便只有应用程序 {xyz} 可以检索 {xyz} 数据库的密码(每个应用程序都有一个数据库详细信息列表......我只需要保护密码)?

4

5 回答 5

3

通常的方法是为每个应用设置不同的配置存储,并为每个应用提供不同的用户/密码以连接到配置存储。

这不会阻止任何人更改应用程序并将应用程序 X 的用户/密码替换为应用程序 Y 的值,但它更安全一些,尤其是当您编译此数据而不是通过配置文件提供它时。

如果您想真正安全,您必须首先创建与商店的安全连接(因此您需要支持此功能的数据库驱动程序)。必须使用每个应用程序唯一且可以验证的安全密钥创建此连接(因此没有人可以随便复制它们)。您将需要使用哈希来保护可执行文件(应用程序将以某种方式计算自己的哈希值并将其发送到服务器,服务器将为每个应用程序提供有效哈希值列表)。

总而言之,这不是一件微不足道的事情,你可以用一个不起眼的选项打开它。首先,您需要了解很多关于安全性和安全数据交换的知识。您需要一种方法来将您的应用程序安全地安装在不安全的地方,验证其完整性,保护代码免受可以在运行时附加的调试器以及在虚拟机中运行的代码等。

于 2009-08-14T11:36:17.790 回答
1

在我的脑海中,尝试 PKI。

于 2009-08-14T11:29:29.613 回答
1

您是否试图保护自己免受恶意程序的侵害,这是这些应用程序连接到的中央数据库吗?如果是这样,您可能应该考虑在数据库和应用程序之间设置一个中间层。

我不确定这是否适用于您的情况,具体取决于您对上述问题的回答如何,但从评论看来,您的情况与此问题的内容类似。

在 C# 应用程序中保护数据层

于 2009-08-14T12:19:20.003 回答
0

一种可能性是将密码以加密形式保存在数据库中,并通过安全连接将加密密钥传送给允许的应用程序。然后,只有具有加密密钥的应用程序才能真正获取密码,而其他应用程序不能。

于 2009-08-14T11:44:34.310 回答
0

最简单/最直接的方法是以加密格式存储密码(以明文存储密码无论如何都是很糟糕的,正如最近在 PerlMonks 上所展示的那样)并使每个应用程序负责执行自己的密码加密/解密。然后,一个应用程序是否检索到另一个应用程序的密码就无关紧要了,因为它仍然无法解密它们。

于 2009-08-14T12:30:54.407 回答