ASP.NET MVC 4 - как зашифровать строку подключения к моему производственному SQL server?

У меня есть ASP.NET проект MVC 4, который должен быть развернут в Azure для производства, в производстве я использую базу данных SQL Azure. Моя проблема в том, что я хочу подключиться к базе данных SQL Azure только в рабочем развертывании, а не при разработке,и что строка подключения SQL Azure должна быть зашифрована.

теперь я могу решить первое требование через Интернет.преобразование конфигурации, чтобы строка подключения к базе данных была заменена при развертывании в лазурь. Однако я не вижу, как объединить это с шифрованием строки подключения? Как можно зашифровать строку подключения SQL Azure и заменить ее строкой подключения к разработке при развертывании? Лучшие практики для этого сценария будут приветствоваться:)

2 ответов


Я думаю, что хорошим решением здесь является тип производства в Интернете.настройте и зашифруйте его, а затем переместите зашифрованное <connectionStrings> раздел в файле преобразования (например, Web.Освобождать.config) и аннотировать его так, чтобы он заменил целое <connectionStrings> раздел после преобразования. Это позволяет достичь цели развертывания Web.config с производственными строками подключения, которые также зашифрованы.

я следовал руководству в разделе " Защита строки подключения в Windows Azure", parts 1, 2, 3 и 4 чтобы понять, как зашифровать веб.конфиг. Я предлагаю, чтобы для полной справки, другие делают то же самое. Я изложу основные шаги, которые я выполнил для решения моего сценария.

после обновления в Интернете.config с производственными настройками, я установил Pkcs12 Защищенный Поставщик Конфигурации и побежал команду aspnet_regiis.exe для шифрования раздела (В визуальном Командная строка Studio, расположенная в каталоге проекта):

aspnet_regiis -pef "connectionStrings" "." -prov "CustomProvider"

Я также добавил определение CustomProvider в web.config:

<configProtectedData>
  <providers>
    <add name="CustomProvider" thumbprint="<your thumbprint here>"
       type="Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider, PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d"/>
  </providers>
</configProtectedData>

после этого я переместил зашифрованный в Интернете.Освобождать.config (который используется для преобразования Web.config при развертывании в Azure) и аннотировал раздел, чтобы он заменил соответствующий раздел в Web.config:

connectionStrings configProtectionProvider="CustomProvider" xdt:Transform="Replace">
...
</connectionStrings>

наконец-то я восстановил развития в Интернете.конфиг. Я протестировали это решение и обнаружили, что развернутый Web.config содержит зашифрованный <connectionStrings> раздел, так же, как я был после.


вы зашифруете раздел в интернете.конфигурационный файл.

см. MSDN о том, как шифровать разделы вашего интернета.конфигурационный файл.

http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

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

например:

if $(ConfigurationName) == Release_Production {path-to-.net-framework}\aspnet_regiis\Aspnet_regiis.exe {your options here}

помните, что события post build-это просто простые команды DOS. Вы даже можете использовать () для области нескольких команд. If работает только на этой строке 1, Если вы не охватываете ее. Стандартные ограничения командной строки. Комментарий здесь, Если у вас есть проблемы с его настройкой, но в командной строке после УР.