我创建了一个连接到sql 2005服务器的c#应用程序(不是asp网页)。在我的源代码中,此sql-server的密码和用户标识是ConnectionString中的纯文本编码。
SqlConnection con = new SqlConnection();
con.ConnectionString =
"Data Source=server1;"+
"Initial Catalog=mydatabase;"+
"Integrated Security=no;"+
"User ID=admin;Password=mypassword;";
con.Open();
是否有一种简单的方法来加密密码或整个连接字符串,反汇编我的工具的其他人无法看到密码?
感谢
答案 0 :(得分:9)
您应该将连接字符串存储在配置文件中并加密该部分。请参阅http://www.4guysfromrolla.com/articles/021506-1.aspx或http://msdn.microsoft.com/en-us/library/89211k9b%28VS.80%29.aspx。
答案 1 :(得分:4)
有两种方法:
1)您可以使用Configuration Secure Section来加密和解密源代码中的连接strimng:
try
{
// Open the configuration file and retrieve
// the connectionStrings section.
Configuration config = ConfigurationManager.
OpenExeConfiguration(exeConfigName);
ConnectionStringsSection section =
config.GetSection("connectionStrings")
as ConnectionStringsSection;
if (section.SectionInformation.IsProtected)
{
// Remove encryption.
section.SectionInformation.UnprotectSection();
}
else
{
// Encrypt the section.
section.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
}
// Save the current configuration.
config.Save();
Console.WriteLine("Protected={0}",
section.SectionInformation.IsProtected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
2)您可以使用企业库数据访问应用程序块使用RSAProtectedConfigurationProvider或DPAPIProtectedConfigurationProvider执行加密。
如需完整的话,请访问 - > http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx
答案 2 :(得分:1)
不,你只能让它变得困难
最好让应用程序使用特殊的数据库登录,只能访问必要的表/过程。
答案 3 :(得分:0)
您可以使用与web.config相同的方式在app.config中encrypt sections。 MS称之为Protected Configuration。由于加密数据和密钥都位于同一台机器上,因此只会使其变得更难,但理论上并非不可能获取数据。
答案 4 :(得分:-3)
您还可以在注册表中存储UserName和Password,而不是存储在配置文件中。尝试连接数据库时,从注册表中读取用户名和密码。请记住,您必须在注册表中存储时加密用户名和密码,并在从注册表中检索时解密用户名和密码。