加密SQL连接字符串c#

时间:2010-01-29 07:26:25

标签: c# sql encryption connection-string

我创建了一个连接到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();

是否有一种简单的方法来加密密码或整个连接字符串,反汇编我的工具的其他人无法看到密码?

感谢

5 个答案:

答案 0 :(得分:9)

您应该将连接字符串存储在配置文件中并加密该部分。请参阅http://www.4guysfromrolla.com/articles/021506-1.aspxhttp://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,而不是存储在配置文件中。尝试连接数据库时,从注册表中读取用户名和密码。请记住,您必须在注册表中存储时加密用户名和密码,并在从注册表中检索时解密用户名和密码。