2

我有一个应用程序,我应该在其中连接到 SQL Server。它受密码保护。因此,当我第一次启动程序时,我会动态创建 connectionString 并将其保存在 app.config 中。下次我可以使用创建的连接字符串。我用谷歌搜索并决定执行以下操作:在 app.config 中加密 connectionString 并将密码保存在我的代码中。当我下次想连接数据库时,我将解密 connectionString,添加 userId 和密码,并用新的 connectionString 连接到服务器。在关闭程序之前,我会从 connectionString 中删除 userId 和 password 并再次加密。但我有一些问题:

1)这是一个好的解决方案吗?

2)当我第一次启动程序时,我需要创建连接字符串,所以代码中的某处应该是用户ID和密码。如何处理这个问题?

4

4 回答 4

2

据我了解,您动态创建连接字符串。所以你也可以从代码中加密这个部分。默认情况下,加密算法将使用您的机器密钥来加密部分,这里是如何做的链接http://www.dotnetcurry.com/ShowArticle.aspx?ID=185

于 2013-08-27T14:30:47.253 回答
1

在关闭程序之前,我会从 connectionString 中删除 userId 和 password 并再次加密

这不是一个好的解决方案。您的数据应始终加密或至少在程序终止时丢失。如果您的用户使用任务管理器杀死您的程序(或者它只是崩溃),并且您依赖于您的程序将在退出时加密数据这一事实,那么您的数据将保持未加密状态。

您可以在获得用户名和密码时加密整个连接字符串。然后,任何时候你想连接,解密它,将它传递给所需的函数并摆脱它。永远不要以未加密的方式保存它。

于 2013-08-27T14:27:44.697 回答
1

在 app.config 中创建 DBUsername、DBPassword 和其他 DB 条目作为键。对于 DBPassword,使用硬编码在代码中的主密钥对其进行加密(可能是对称的)。这通常就足够了。还有其他方法,例如使用密钥库来存储密钥。

如果您不想每次都构造 conn 字符串,请创建包含整个连接字符串的应用程序配置条目并使用主密钥加密整个内容(我在这里看不到任何值)。

于 2013-08-27T14:29:27.880 回答
0

如果您使用的是 windows 并且凭据与 windows 身份验证相同,则可以从连接字符串中省略用户名和密码,并将其替换为 Trusted_Connection=true

于 2019-01-30T20:00:32.023 回答