1

我正在使用带有未绑定表单的 Microsoft Access 2010。不允许链接表,否则连接字符串存储在表定义中。因此,我们将使用没有名称的查询定义来访问 SQL SERVER。这是微软推荐的。我们需要从某个地方获取连接字符串。所以建议从带有混淆名称的方法中返回它。建议不要在应用程序源中以纯文本形式嵌入连接字符串。所以我们使用加密。

这样做的一个好方法是要求应用程序管理员在第一次运行应用程序时定义连接字符串,并根据这篇 msdn 文章

...通过 DPAPI 使用运行应用程序的帐户的用户特定密钥对其值进行加密,并将加密的值保存在 Windows 注册表中。

accde 从登录的 Windows 用户帐户启动,之后应用程序管理员可以按照上述建议登录并设置与数据库的连接。

我现在似乎拥有的最薄弱的环节是 Windows 用户帐户。如果他们知道安全方案的实现,似乎任何登录到该帐户的人都可以解密连接字符串。这意味着系统仍然不够安全。

我可以创建一个新的 windows 用户,但这意味着该用户的密码必须保持安全,这意味着我们回到了第 1 步,保护用于访问某些机密信息的密码。

一定有更简单的方法,有什么想法吗?

4

1 回答 1

0

是否有理由需要在会话之间保留连接字符串?您是否可以在您的应用程序中构建一个登录表单,您可以在其中接受用户的凭据、服务器实例和他们将连接到的数据库名称,并在应用程序运行时将此信息保存在内存中?

这可能会提供更大的灵活性,因为管理员可以决定将数据库移动到新服务器,而不必担心解密连接字符串以更改它并重新加密它。它还允许定义多个数据库 - 我正在考虑这样一种情况,即您将定义一个 QA 服务器来测试更改,然后再推广到生产服务器。

于 2011-04-14T15:16:49.087 回答