зашифровать строку соединения SQL c # - PullRequest
16 голосов
/ 29 января 2010

Я создал приложение c # (не asp webpage), которое подключается к серверу sql 2005. В моем исходном коде пароль и идентификатор пользователя для этого sql-сервера кодируются в виде простого текста в ConnectionString.

SqlConnection con = new SqlConnection();
con.ConnectionString = 
         "Data Source=server1;"+
         "Initial Catalog=mydatabase;"+
         "Integrated Security=no;"+
         "User ID=admin;Password=mypassword;";
con.Open();

Есть ли простой способ зашифровать пароль или целую строку подключения, чтобы другие люди, которые разбирают мой инструмент, не могли видеть пароль?

спасибо

Ответы [ 5 ]

9 голосов
/ 29 января 2010

Вы должны сохранить строку подключения в файле конфигурации и зашифровать этот раздел. См http://www.4guysfromrolla.com/articles/021506-1.aspx или http://msdn.microsoft.com/en-us/library/89211k9b%28VS.80%29.aspx.

4 голосов
/ 29 января 2010

Есть два способа сделать это:

1) Вы можете использовать Секцию безопасного конфигурирования, чтобы зашифровать и дешифровать разметку соединения из вашего исходного кода:

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) Вы можете блокировать приложение доступа к данным Enterprise Library для шифрования с использованием RSAProtectedConfigurationProvider или DPAPIProtectedConfigurationProvider.

Для полной статьи перейдите к -> http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx

1 голос
/ 29 января 2010

Нет, вы можете только усложнить

Лучше разрешить приложению использовать специальный вход в базу данных, который получил только необходимые таблицы / процедуры.

0 голосов
/ 29 января 2010

вы также можете сохранить имя пользователя и пароль в реестре вместо сохранения в файле конфигурации. Прочитайте имя пользователя и пароль из реестра при попытке подключения к базе данных. Помните, что вы должны зашифровать имя пользователя и пароль при хранении в реестре и расшифровать имя пользователя и пароль при извлечении из реестра.

0 голосов
/ 29 января 2010

Вы можете зашифровать разделы в app.config так же, как web.config. MS называет это Защищенная конфигурация . Поскольку зашифрованные данные и ключ находятся на одной машине, это только усложняет задачу, но теоретически получить доступ к данным не представляется возможным.

...