MySQL データベースからデータを取得し、それを SQL Server テーブルに入れる SSIS パッケージがあります。MySQL への接続は ADO.net です。パッケージは BIDS で正常に動作します。
SQL Server 2008 でジョブとして実行するパッケージを展開したいと考えています。MySQL 接続では、機密データをパッケージ内に保存するか、外部構成ソースに保持する必要があります。パッケージ内に保存されている場合は、Windows ユーザー プロファイルに固有のキーで暗号化するか、パスワードで保護する必要があります。
このパッケージを実行するために SQL Server エージェント ジョブを設定する 3 つの方法を試しましたが、すべて失敗しました。
パスワードの使用
パッケージの ProtectionLevel を EncryptSensitiveWithPassword に設定し、パッケージのパスワードを指定します。次に、パッケージのコピーを msdb に保存します。その後、SSIS に接続してパッケージを実行すると、パスワードの入力を求められます。
これを SQL Server でジョブとしてスケジュールしようとすると、[ジョブ ステップのプロパティ] の [構成] タブをクリックしてパスワードを入力するように求められ、[コマンド ライン] タブに /DECRYPT スイッチが追加されていることがわかります。Run As プロパティは、sysadmin サーバー ロールを持つデータベース ログインにマップされる SQL Server エージェント サービス アカウントに設定されます。このジョブを開始しようとすると、次のエラーが発生します。
Executed as user: DOMAIN\UserROLE. Microsoft (R) SQL Server Execute Package Utility Version 10.0.5500.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 12:31:30 Error: 2012-07-03 12:31:31.20 Code: 0xC00291EC Source: Get Data Execute SQL Task Description: Failed to acquire connection "DATA_SOURCE". Connection may not be configured correctly or you may not have the right permissions on this connection. End Error DTExec: The package execution returned DTSER_FAILURE
この方法を使用すると、ジョブがアクセスできるようにパッケージのパスワード自体がどこにも保存されないようです。
XML 構成ファイルの使用
次に、パッケージのコピーを作成し、ProtectionLevel を DontSaveSensitive に設定し、MySQL 資格情報を XML ファイルに格納するようにパッケージ構成をセットアップしました。次に、これを msdb に保存し、Integration Services からパッケージを実行するときに、構成ファイルへのパスを指定できます。すべて問題ありません。ただし、パッケージのジョブを設定するときにサーバー上の構成ファイルを指定すると、ジョブは同じエラーで失敗します。これは、ファイル システムに格納されている XML ファイルから読み取ることができる Windows アカウントが SQL Server エージェントに関連付けられていないためではないかと考えています。
SQL Server テーブル構成の使用
今回はパッケージのコピーを作成し、ProtectionLevel を ServerStorage に設定しました。次に、ターゲット SQL Server データベースに [SSIS Configurations] テーブルを作成しました。このテーブルのエントリを変更して、MySQL データ ソースのパスワードを含めました。この場合も、パッケージは Integration Services から正常に実行されますが、ジョブから実行すると以前と同じエラーで失敗します。SQL Server エージェントが [SSIS Configurations] テーブルから読み取れることを確認しました。これをテストするためにスタンドアロン ジョブをセットアップしました。
ここで他に何をすべきかについて何か提案はありますか?
このために SQL Server エージェント ジョブをあきらめて、Windows スケジューラだけでパッケージをスケジュールする方法に戻ることを考えていますが、タオルを投げる前にまずここで試してみようと思いました。