如何保护connectionString

时间:2013-08-27 14:21:24

标签: c# sql-server security

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

  

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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