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