我有一个应用程序,我应该连接到SQL Server。它受密码保护。因此,当我第一次启动程序时,我正在动态创建connectionString并将其保存在app.config中。下次我可以使用创建的connectionString。我用Google搜索并决定执行以下操作:在app.config中加密connectionString并在我的代码中保存密码。当我想下次连接到数据库时,我将解密connectionString,添加userId和密码并连接到服务器的新connectionString。在关闭程序之前,我将从connectionString中删除userId和密码并再次加密。但我有一些问题:
1)这是一个好的解决方案吗?
2)当我第一次启动程序时,我需要创建连接字符串,因此代码中的某处应该是userId和password。如何处理这个问题?
答案 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