ProtectionLevel


SSISパッケージではパッケージのセキュリティレベルをProtectionLevelプロパティで設定することができる
以下、プロパティの種類についての説明


DontSaveSensitive
→接続文字列中のパスワードなど機微なプロパティはパッケージに保存されない
 機微なプロパティは構成ファイルなどで管理する必要がある


EncryptAllWithPassword
→パッケージ全体をパスワードを使って暗号化


EncryptAllWithUserKey
→パッケージ全体をユーザープロファイルを使って暗号化


EncryptSensitiveWithPassword
→接続文字列中のパスワードなど機微なプロパティをパスワードを使って暗号化


EncryptSensitiveWithUserKey
→接続文字列中のパスワードなど機微なプロパティをユーザープロファイルを使って暗号化


ServerStorage
→暗号化なし
 データベースのオブジェクト アクセス セキュリティで保護される
 このプロパティのパッケージをファイルシステムに保存することはできない



ProtectionLevelをEncryptAllWithUserKey、EncryptSensitiveWithUserKeyにすると
他のマシンに移動した場合や作成したユーザとは別ユーザで実行する場合(SQL Server エージェント)に
暗号化が解除できないので実行されない


なので、あまり使い勝手が良くないような気がする





以下、ProtectionLevelがEncryptSensitiveWithPasswordで作成〜実行までの手順のメモ


1.パッケージを作成する


2.パッケージのプロパティを以下のように設定する

ProtectionLevel→EncryptSensitiveWithPassword
PackagePassword→パッケージのパスワード(任意)


3.Integration Servicesに接続し、作成したパッケージをSSISパッケージストアへ登録
(登録の際、PackagePasswordの入力が求められる)



登録したSSISコマンドプロンプトから実行する

dtexec  /SQL "パッケージ名" /Ser サーバ名 /De "パッケージのパスワード"

※/Deオプションでパッケージのパスワードを指定する



登録したSSISSQLから実行する

DECLARE  @ret_code int   ------ 戻り値判別用

EXECUTE @ret_code = master.dbo.XP_CMDSHELL 'dtexec  /SQL "パッケージ名" /Ser サーバ名 /De "パッケージのパスワード"'  , no_output

SELECT @ret_code 

※XP_CMDSHELLはでデフォルトでは実行権限がないので実行権限を付与する必要がある




動作確認環境:SQL Server 2008 Developer