5

我正在研究企业项目中的存储过程加密。我们有一堆 SP 应该在生产中受到保护。在中的每个 SP 中设置参数
是没有问题的。但我想将此指令设为可选:如果我在调试模式下构建项目 - 不要应用此过程选项,否则 - 使用它。实际上这里的主要目标是在没有加密的情况下为开发人员获取数据库,但在生产 - 加密的 SP 上。 在构建任务中使用脚本我可以修改生成的 sql 文件并因此获取带有加密参数的脚本,但我想知道它如何与. 有什么建议么?WITH ENCRYPTIONsqlproj
PowerShelldacpac

更新:

玩了一段时间后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。

4

1 回答 1

2

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

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

于 2012-11-06T23:01:18.127 回答