Параметр ШИФРОВАНИЯ хранимой процедуры в зависимости от режима сборки

Я работаю над шифрованием хранимых процедур в корпоративном проекте. У нас есть куча SP, которые должны быть защищены в рабочей среде.
Нет проблем установить параметр WITH ENCRYPTION в каждом SP, который находится в sqlproj. Но я хочу сделать эту директиву необязательной: если я собираю проект в режиме отладки - не применяйте этот параметр процедуры, иначе - используйте его. Собственно основная цель здесь - получить БД для разработчиков без шифрования, а на продакшене - зашифрованные SP'ы.
Используя скрипт PowerShell в задаче сборки, я могу изменить сгенерированный файл sql и в результате получить скрипт с параметром шифрования, но мне интересно, как он будет работать с dacpac.
Есть предложения?

Обновление:

Через некоторое время, проведенное за игрой с msbuild. Решил остановиться (по крайней мере пока) на решении с PowerShell скриптовой задачей после SqlCore цели:

<Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks" Condition="Exists('$(ExtensionTasksPath)MSBuild.ExtensionPack.dll')" />
  <UsingTask TaskFactory="PowershellTaskFactory" TaskName="CreateDecryptedScript" AssemblyFile="$(PowerShellTaskAssembly)" Condition="Exists('$(PowerShellTaskAssembly)')">
    <ParameterGroup>
      <File Required="true" ParameterType="System.String" />
      <ResultFile Required="true" ParameterType="System.String" />
    </ParameterGroup>
    <Task>
      <![CDATA[      
      (Get-Content $file) | Foreach-Object {$_ -replace 'WITH ENCRYPTION', '--WITH ENCRYPTION'} | Set-Content $resultfile    
    ]]>
    </Task>
  </UsingTask>
<Target Name="CreateDecryptedScript" AfterTargets="SqlCore">
    <CreateDecryptedScript File="$(OutputPath)$(CreateScriptFileName)" ResultFile="$(OutputPath)$(DecryptedScriptName)" Condition="Exists('$(PowerShellTaskAssembly)')" />
</Target>

В итоге после пересборки проекта имеем скрипт для создания БД без шифрования.

Но publish, который вызывается из проекта, не заставляет это делать, и мы изменим все SP с шифрованием.


person Anatolii Gabuza    schedule 06.11.2012    source источник
comment
Сценарий после развертывания для изменения SP может помочь.   -  person Andrew Clear    schedule 10.11.2012
comment
@ aclear16 aclear16 Да, я думал об этом, но не нашел разумного решения.   -  person Anatolii Gabuza    schedule 13.11.2012
comment
Добавление переменной уровня проекта вместо WITH ENCRYPTION может быть вариантом. Для вашей среды разработки добавьте это как пустую строку или строку с комментариями. Для сред, которые должны быть зашифрованы, используйте значение WITH ENCRYPTION. Установите их в своих профилях публикации.   -  person Peter Schott    schedule 25.10.2013


Ответы (1)


Легко расшифровать «зашифрованные» хранимые процедуры. Я предлагаю вам просто не утруждать себя шифрованием.

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

person Ben    schedule 06.11.2012
comment
Да, именно так это могло бы работать, но все же я ищу гибкое решение, которое не потребует манипуляций с SP в среде разработки. - person Anatolii Gabuza; 07.11.2012
comment
Я думаю, вы меня неправильно поняли. Я имею в виду, не шифруйте их вообще - это пустая трата времени. - person Ben; 07.11.2012
comment
Ох, я понял. Но это не мое решение. И, к сожалению, мне все еще нужно зашифровать SP. Но спасибо за указание. +1) - person Anatolii Gabuza; 07.11.2012