私はエンタープライズプロジェクトのストアドプロシージャの暗号化に取り組んでいます。我々は生産時に保護すべきSPの束を持っています。
sqlproj
にある各SPにWITH ENCRYPTION
パラメータを設定することは問題ありません。しかし、私はこのディレクティブをオプションにしたいと思います:私がデバッグモードでプロジェクトをビルドしている場合 - このプロシージャオプションを適用しないでください。実際の主な目標は、開発者向けのデータベースを暗号化なしで取得することですが、プロダクションでは暗号化されたSPを取得します。
ビルドタスクでPowerShell
スクリプトを使用すると、生成されたsqlファイルを変更することができます。その結果、暗号化パラメータを持つスクリプトを取得できますが、dacpac
とどのように動作するのだろうかと思います。
提案がありますか?ビルドモードに応じたストアドプロシージャのENCRYPTIONオプション
更新:
msbuild
と一緒に遊んで過ごしたいくつかの時間後。プロジェクトを再構築した後、我々は暗号化せずにデータベースを作成するためのスクリプトを持って、その結果
<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>
:私はSqlCore
ターゲットの後PowerShell
スクリプトタスクで溶液に(少なくとも今のところ)を停止することを決めました。
しかし、プロジェクトから呼び出されたpublish
はこのようなことを強制しません。私たちはすべてのSPを暗号化で変更します。
SPを変更するポストデプロイメントスクリプトがこのトリックを行う可能性があります。 –
@ aclear16はい、私はそれについて考えていましたが、合理的な解決策は見つかりませんでした。 –
"WITH ENCRYPTION"の代わりにプロジェクトレベルの変数を追加することもできます。あなたのdev環境のためにこれを空の文字列またはコメント行として追加してください。暗号化する環境の場合は、値に「WITH ENCRYPTION」を使用します。あなたの公開プロフィールにそれらを設定してください。 –