Практическое руководство. Безопасность строк подключения при использовании элементов управления источником данных
Обновлен: Ноябрь 2007
Во время работы с элементами управления источником данных следует централизовать месторасположение строк подключения, разместив их в пределах файла Web.config приложения. Преимущества этого процесса двоякие: элементы управления источником данных могут ссылаться на имя строки подключения из файла конфигурации чаще, чем включать строку подключения в качестве свойства элемента управления. Но при этом администрирование веб-узла проводится легче, поскольку управление строками подключения централизовано, что устраняет необходимость в повторном посещении отдельных страниц при изменении сведений о строке подключения.
В данном разделе будет рассказано о том, как разместить строки подключения в файле Web.config с помощью Visual Studio и элемента управления источником данных, а также о том, как использовать служебную программу командной строки под названием Aspnet_regiis.exe для шифрования строк подключения в целях обеспечения дополнительного уровня безопасности.
Добавление строки подключения в файл Web.config с помощью элемента управления источником данных
Откройте страницу ASPX в представлении Конструктор в Visual Studio.
Перетащите на поверхность разработки из папки Панель элементов, расположенной в папке Данные, элемент управления источником данных, например элемент управления SqlDataSource.
Щелкните правой кнопкой мыши элемент управления и выберите команду Показать смарт-тег.
В панели смарт-тега нажмите кнопку Настройка источника данных.
В панели Выбор подключения к данным нажмите кнопку Новое подключение.
Выберите подходящий источник данных из списка в диалоговом окне Выбор источника данных и затем нажмите кнопку ОК.
Укажите правильное имя сервера, имя пользователя и пароль в диалоговом окне Добавить подключение и затем нажмите кнопку ОК.
Вновь появится диалоговое окно Настройка источника данных со сводкой сведений о подключении.
Нажмите кнопку Далее и затем — Да, чтобы сохранить строку подключения в файле Web.config.
Строка подключения теперь хранится в файле Web.config, и сейчас можно настроить подробные сведения о запросе для элемента управления.
Шифрование сведений о строке подключения, сохраненной в файле Web.config
В командной строке Windows выполните инструмент для регистрации ASP.NET IIS (Aspnet_regiis.exe) со следующими параметрами:
параметр -pe передает его в строку "connectionStrings" для шифрования элемента connectionStrings;
параметр -app передает имя приложения.
Инструмент Aspnet_regiis.exe расположен в папке %systemroot%\Microsoft.NET\Framework\versionNumber.
В следующем примере кода показан процесс шифрования раздела connectionStrings файла Web.config для приложения под названием SampleApplication:
aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
По завершении команды можно просмотреть содержимое файла Web.config. В разделе конфигурации connectionStrings будут содержаться зашифрованные сведения вместо текстовой строки подключения, показанные в следующем примере кода:
<configuration> <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings> </configuration>
Оставьте открытым окно командной строки для выполнения дальнейших шагов.
Определите учетную запись пользователя или идентификацию, под которой выполняется ASP.NET при получении текущего имени метода WindowsIdentity.
В следующем примере кода показан один из способов определения имени метода WindowsIdentity:
<%@ Page Language="VB" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name) %>
<%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
Примечание. По умолчанию на Windows Server 2003 с олицетворением для приложения ASP.NET, отключенным в файле Web.config, идентификацией, под которой выполняется приложение, является учетная запись NETWORK SERVICE. На других версиях Windows ASP.NET выполняется под локальной учетной записью ASPNET.
Учетная запись пользователя или идентификация, под которой выполняется ASP.NET, должны обладать доступом на чтение ключа шифрования, используемого для шифрования и расшифровки разделов файла Web.config. В данной процедуре предполагается, что веб-узел настроен с параметрами по умолчанию RsaProtectedConfigurationProvider, указанными в файле Machine.config под названием RsaProtectedConfigurationProvider. Контейнер ключа RSA, использующий по умолчанию параметр RsaProtectedConfigurationProvider, называется NetFrameworkConfigurationKey.
В командной строке выполните инструмент Aspnet_regiis.exe со следующими параметрами:
параметр -pa передает имя контейнера ключа RSA для метода RsaProtectedConfigurationProvider, заданного по умолчанию;
идентификация приложения ASP.NET, как указано на предыдущем этапе.
В следующем примере кода показано, как предоставить доступ учетной записи NETWORK SERVICE к ключу контейнера RSA — NetFrameworkConfigurationKey — на уровне компьютера:
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
Для расшифровки зашифрованного содержимого файла Web.config выполните инструмент aspnet_regiis.exe с параметром -pd. Синтаксис аналогичен зашифрованному содержимому файла Web.config с параметром -pe за исключением того, что не указывается поставщик защищенной конфигурации. Соответствующий поставщик указан в атрибуте configProtectionProvider для защищенного раздела.
В следующем примере кода показано, как провести расшифровку элемента connectionStrings приложения ASP.NET под названием SampleApplication:
aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
См. также
Другие ресурсы
Шифрование сведений о конфигурации с помощью функции защищенной конфигурации