存储过程ENCRYPTION选项取决于构建模式

时间:2012-11-06 17:13:51

标签: sql-server visual-studio encryption msbuild sql-server-data-tools

我正在从事企业项目中的存储过程加密。我们有一堆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。

1 个答案:

答案 0 :(得分:2)

解密“加密”存储过程很容易。我建议你不要费心加密它们。

如果你必须对它们进行加密,我建议在DEV中进行部署后步骤,逐步解密每个加密的存储过程。您可以使用sp_execsql和链接中的信息轻松创建此类步骤。