Microsoft Visual Studio 2013 ShellのSQL Server Integration Services(SSIS)デザイナーでSSISの処理定義を作成し、ビルドしてできた拡張子dtsxのファイルをDBサーバー上で動かそうとしているのですが、うまく行きません。
特に何も設定無しで作成し、データ取得元としてSQL Serverの接続情報を定義した状態でビルドしたのですが、初期状態だとパッケージのプロパティ「Protection Level」の設定が「EncryptSensitiveWithUserKey」という値になっており、この場合だと開発環境の利用者情報をキーにして定義情報上でパスワード文字列が暗号化されてしまうようです。
表示されるエラーは
~.dtsx 読み込みエラー: エラー 0x8009000B "指定された状態で使用するには無効なキーです。" により、保護されたXMLノード"DTS:Password" の暗号化を解除できませんでした。 この情報にアクセスする権限がない可能性があります。 このエラーは、暗号化エラーが発生した場合に発生します。 正しいキーが使用可能であることを確認してください。
そのため、dtsxファイルをほかのサーバーに移動して動かそうとしても暗号解除が行えず、動かないということらしく。
確かにdtsxファイルをテキストエディタで開いてXML形式の定義を見ると、パスワードが設定されているタグは暗号化された文字列羅列になっています。
この回避法として、パスワード文字列を設定ファイルに外だしして、実行時には設定ファイルから設定を読み込むという方式が一般的なようなのですが、これがうまくいかず四苦八苦している状態。以下に自分用メモとして実施した内容を記録しておきます。
設定ファイルを作成する
デザイン画面からメニューバーの「SSIS」を選択し、「パッケージ構成」を選択。「パッケージの構成を有効にする」というチェックを押すと新規追加ボタンが押せるようになるので、追加ボタンを押して設定ファイルに書きだす項目をチェックボックスで選択します。ファイル名の指定ににはパスはいりません。ファイル名だけ指定すれば拡張子も自動設定(.dtsConfig)でビルド出力フォルダにファイルが生成されます。
このファイルですが、設定値は入っていませんので、別途テキストエディタなどで開いて自分で設定を記入する必要があります。
また、設定項目は暗号化されていないので、うかつな内容をここに書くと設定ファイルから内容が読めてしまいますので注意が必要なようです。
dtexecからdtsxファイルを実行する
自分の環境だと、SSIS開発環境に対応するSQL Serverの実行ファイル群は「c:\Programn Files\Microsoft SQL Server\120\DTS\Binn」にありました。コマンドプロンプトを開いてここまで移動して、以下のコマンドでdtsxファイルと設定ファイルを読み込んで実行しようとしたのですがうまく動きません……
dtexec /FILE <dtsxファイル名> /Conf <dtsConfigファイル名>
原因等はこの後調べます。
Professional SQL Server 2005 Integration Services (Programmer to Programmer)
- 作者: Brian Knight,Allan Mitchell,Darren Green,Douglas Hinson,Kathi Kellenberger,Andy Leonard,Erik Veerman,Jason Gerard,Haidong Ji,Mike Murphy
- 出版社/メーカー: Wrox
- 発売日: 2006/01/31
- メディア: ペーパーバック
- この商品を含むブログ (1件) を見る
パスワードの保存をパッケージパスワードで暗号化してみる
Protection Levelをパッケージパスワードで暗号化するように変更。パッケージのプロパティにあるパスワード設定に「test」といった適当な文字列を設定してパッケージをビルド。コマンドプロンプトから
dtexec /FILE <dtsxファイル名> /De test
とやったところ、動きました。とりあえず「動かす」については達成。ただ、設定ファイルを使ったパスワード指定方法についてはいずれは解決しないといけない問題として残ります。