我正在使用带有未绑定表单的Microsoft Access 2010。不允许链接表,否则连接字符串存储在表定义中。因此,我们将使用没有名称的查询定义来访问SQL SERVER。这是Microsoft推荐的。我们需要从某个地方获取连接字符串。因此,建议从具有模糊名称的方法返回它。建议不要在应用程序源中以纯文本形式嵌入连接字符串。所以我们使用加密。
执行此操作的一种好方法是要求应用程序管理员在第一次运行应用程序时根据this msdn article
定义连接字符串...通过DPAPI使用运行应用程序的帐户的用户特定密钥加密其值,并将加密值保存在Windows注册表中。
accde从登录的Windows用户帐户启动,之后应用程序管理员可以按照上述建议登录并设置与数据库的连接。
我现在似乎拥有的最薄弱的链接是Windows用户帐户。似乎登录到该帐户的任何人都可以解密连接字符串,如果他们知道安全方案的实现。这意味着系统仍然不够安全。
我可以创建一个新的Windows用户,但这意味着该用户的密码必须保持安全,这意味着我们回到1号方位,保护用于访问某些秘密信息的密码。
必须有一种更简单的方法,任何想法?
答案 0 :(得分:0)
是否有理由需要在会话之间保持连接字符串?您是否可以在应用程序中构建一个登录表单,在该表单中您接受将要连接的用户凭据,服务器实例和数据库名称,并在应用程序运行时将此信息保留在内存中?
这可能提供更大的灵活性,因为管理员可以决定将数据库移动到新服务器,而不必担心解密连接字符串以更改它并重新加密它。它还允许定义多个数据库 - 我正在考虑这样一种情况:在推出到生产服务器之前,您将为测试更改定义QA服务器。