从用户和 QA 保护 VBA 应用程序中的数据库密码

Securing database passwords in a VBA application from users and QAs

我们有一个 Word VBA 应用程序安装在 1000 多台计算机上,用户每天都在使用它。这个 VBA 插件连接到多个数据库,这些数据库的凭据存储在我们提出的自定义 xml 文件中。我们公司现在不希望将密码以明文形式存储在 xml 文件中,因为当应用程序安装在用户计算机上时,xml 文件也会作为安装文件夹的一部分被推送到安装文件夹中。安装和深入研究 xml 的好奇用户实际上可以找到数据库的密码。他们希望在一周内实施一项安全功能,而无需对代码进行大规模更改,这将防止用户和 QAs/prod 测试应用程序的支持人员看到这些密码。由于时间有限,我想出了这个主意:

  1. 在 xml 文件中使用替换字符串作为密码占位符。(示例如下)
  2. 应用程序本身有一个字典,将这些值映射到实际密码。
  3. 用密码保护包含实际应用程序代码的文件。

第 1 点中提到的示例 Xml。

<Database-Passwords>
    <DB-Name>DB1</DB-Name>
    <Username>Username1</Username>
    <Password>FakePassword1</Password>
</Database-Passwords>

在应用程序代码中维护一个键值对列表,其中 (FakePasword1, RealPassword1) 作为键值对。

这将防止用户知道密码。但是通过代码和调试应用程序的 QA 和 Prod Support 仍然可以识别密码。这怎么能克服呢?有没有一种方法可以保护密码,使应用程序只需更改最少的代码即可无缝运行,但 users/QAs 将无法破解密码?

  1. Having substitute strings in the xml file as a password place holder.(example below)

UNSAFE,稍有知识的人都可以反编译您的应用程序并找出真正的密码。我想即使用记事本打开exe,dll也能给我真实的密码。

  1. Have a dictionary in the application itself that maps these values to the actual password.

编辑:可能不安全,我不太明白这个背后的想法。听起来很像第一个选项。

  1. Password-protect the file that has the actual application code.

UNSAFE 你可以在你的 OS 中 "password-protect" 它,这并不意味着如果我尝试使用 Linux Live CD 我无法以纯文本格式查看文件。此外,您还必须(可能)将文件密码存储在您的应用程序中,并且用户可以执行我在第一个选项中提到的相同操作来查找文件密码。

保护数据库密码的最佳方法是将其置于受控访问环境(例如服务器)中。这意味着您必须创建一个客户端服务器架构。基本上,您将创建一个客户端应用程序,它将与服务器连接,服务器将 "talk" 与 DB