1

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 スケジューラだけでパッケージをスケジュールする方法に戻ることを考えていますが、タオルを投げる前にまずここで試してみようと思いました。

4

1 に答える 1

0

上記のように設定してパスワードを暗号化する方法を使用していEncryptSensitiveWithPasswordますが、間違ったことは何もありません。keep protection level of the original package統合サービスを使用してパッケージをインポートするときはオプションを使用することを忘れないでください。ただし、それも行っているようです。

ロールSQLAgentOperatorRoleを SQL Server エージェント サービス アカウントに設定してみてください。それについて言及していませんでした。これにより、許可の問題が解決される可能性があります。(これにコメントして答えるのが好きでしたが、ここでも権限がありません:)

于 2012-07-03T12:52:45.613 に答える