如何在C#连接字符串中隐藏密码?

我有以下连接字符串:

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password 

(.net webservice)显然可以通过打开app.config文件并查看配置设置来查看。

我需要的是一种让黑客无法看到密码的方法。 但同时,保持可自定义,以便在部署到另一个数据库时可以更改它。

你有很多选择 – 我所知道的(按照优先顺序):

  1. 使用集成(SSPI)安全性,您无需在配置文件中包含密码
  2. 加密连接字符串(请参阅使用受保护的配置加密配置信息 )
  3. 分别存储用户名和密码,并使用字符串格式构建完整的连接字符串,

例如,连接字符串可能如下所示:

 Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1} 

我会选择选项1,如果那不可能那么选项2.我已经提到了选项3的完整性。

您是否阅读过保护连接信息(ADO.NET) ?

首先,不要使用“SA”帐户。 如果有人获得密码,它会使您的数据库全开。 使用仅允许在特定数据库上执行CRUD操作的自定义帐户。

获取web.config的唯一方法是破解你的服务器。 如果他们这样做了,你还是被搞砸了。

可能最容易加密web.config或app.config中的连接字符串

请参见如何:使用DPAPI加密ASP.NET 2.0中的配置节

您可以加密连接字符串 – 然后当您访问连接字符串时,解密它。 这不是万无一失的,因为你会遇到存储密钥来解密连接字符串的问题!

我建议/解密连接字符串。 因此,必须手动设置连接字符串。

有关加密,请查看: http : //dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

有关自定义设置,请查看: http : //msdn.microsoft.com/en-us/library/8eyb2ct1.aspx

在运行时将Encrypted替换为正确的:

  public static void SetAppSettingValue(string Key, string Value) { System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Add an Application Setting. config.AppSettings.Settings[Key].Value = Value; // Save the changes in App.config file. config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); }