2016-04-17 4 views
0

Я хочу создать клиент, который подключается к SQL Server и имеет полный доступ.C# Как шифровать строку подключения SQL Server?

Как это сделать, чтобы другие не увидели строку подключения для SQL Server и не получили доступ к ней через другие редакторы db? Я знаю, что .NET-приложения могут быть декомпилированы, поэтому я боюсь за свой сервер.

+0

Вставьте строку подключения в файл конфигурации и зашифруйте ее. Если это веб-приложение, его легко шифровать с помощью _aspnet_regiis_ с аргументом _-pe_; не так просто для файлов app.config. В качестве альтернативы вы могли бы запутать свой код, но я считаю, что безопасность безвестности является одним из наименее эффективных методов. –

ответ

1

Публично доступный клиент с полными правами db обычно никогда не бывает хорошей идеей, поэтому вы можете пересмотреть это.

Вот хорошая статья MSDN со ссылкой на вашу проблему:

https://msdn.microsoft.com/en-us/library/89211k9b(v=vs.110).aspx

При развертывании клиента Azure можно также хранить конфиденциальную информацию конфигурации отдельно от приложения внутри портала.

еще несколько идей:

Восстановите строку подключения через отдельное дистанционное обслуживание и обрабатывать его с помощью экземпляра SecureString.

Или просто не давайте клиенту строку соединения, скрывая всю SQL-базу за стенкой службы.

0

Использование сертификатов - всегда отличный способ избежать необходимости хранить секреты в конфигурации.

В SQL Azure есть новая функция, позволяющая использовать сертификат для доступа к вашей базе данных. Смотрите эту ссылку для получения более подробной информации: https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/ (раздел 7.3)

0

Вот не так безопасно эталонной реализации простой строки подключения механизма шифрования/дешифрования.

Прежде всего, кодируйте строку соединения с помощью схемы кодирования Base64.

Unencoded Строка соединения:

server=localhost\SQLEXPRESS2012;database=testdb;uid=testuser;pwd=supersecret 

Base64 закодированные Строка соединения:

c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA== 

После этого соответствующая строка в файле App.config должен выглядеть следующим образом.

<add name="TestDb" connectionString="c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA==" providerName="System.Data.SqlClient" /> 

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

using System; 
using System.Configuration; 
using System.Data.Common; 
using System.Data.Entity; 
using System.Data.SqlClient; 
using System.Text; 

namespace TestApp 
{ 
    public class TestDb : DbContext 
    { 
     public TestDb() : base(CreateConnection("TestDb"), true) 
     { 
     } 

     static DbConnection CreateConnection(string dbName) 
     { 
      string encodedCs = ConfigurationManager.ConnectionStrings[dbName].ConnectionString; 
      string decodedCs = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCs)); 
      return new SqlConnection(decodedCs); 
     } 
    } 
} 

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

+0

Вызов этого «шифрования» растягивает определение очень далеко.Это просто другое кодирование и очевидное для всех, кто когда-либо видел несколько строк с кодировкой base64. Если вы в первую очередь не беспокоитесь о том, что ваши бабушки владеют навыками взлома, это практически ничего не делает. – glennsl