SQL Server エージェント ジョブ ステップから呼び出されたときに、SSIS パッケージが実行されません。

適用対象: SQL Server 2008 DeveloperSQL Server 2008 EnterpriseSQL Server 2008 Standard

現象


SQL Server エージェント ジョブ ステップから Microsoft SQL Server 2005 の統合サービス (SSIS) パッケージを呼び出しても、SSIS パッケージが実行されない。ただし、SSIS パッケージを変更しない場合は正常に実行 SQL Server エージェントの外側です。

解決策


この問題を解決するのには、次の方法のいずれかを使用します。最適な方法は、環境と、パッケージが失敗した理由によって異なります。パッケージが失敗した理由は次のとおりです。
  • SQL Server エージェント下でパッケージを実行するために使用されるユーザー アカウントは、元のパッケージ作成者によって異なります。
  • ユーザー アカウントには、接続を確立または SSIS パッケージ外部のリソースにアクセスするには、必要なアクセス許可がありません。
パッケージは、次のシナリオで機能しない可能性があります。
  • 現在のユーザーは、パッケージからシークレットを暗号化解除できません。 このシナリオは、現在のアカウントまたは実行アカウントが、元のパッケージ作成者と異なるし、パッケージのProtectionLevelプロパティの設定は現在のユーザーがパッケージ内の機密情報の暗号化を解除することはできない場合に発生することができます。
  • 現在のユーザーに必要な権限があるないために、統合セキュリティを使用する SQL Server の接続が失敗します。
  • ファイルへのアクセスは、現在のユーザーが接続マネージャーにアクセスするファイル共有への書き込みに必要なアクセス許可を持たないために失敗します。たとえば、このシナリオにログインとパスワードを使用しないテキスト ログ プロバイダーと発生します。このシナリオは、SSIS ファイル システム タスクなど、ファイル接続マネージャーに依存する他のタスクもあります。
  • レジストリ ベースの SSIS パッケージ構成では、HKEY_CURRENT_USER レジストリ キーを使用します。HKEY_CURRENT_USER レジストリ キーは、ユーザーに固有です。
  • タスクや接続マネージャーは、現在のユーザー アカウントが、適切なアクセス許可を持っている必要があります。
方法 1: SQL Server エージェント プロキシ アカウントを使用します。
SQL Server エージェント プロキシ アカウントを作成します。このプロキシ アカウントは、SQL Server エージェントがパッケージを作成したアカウント、または必要なアクセス許可を持つアカウントとしてジョブを実行する資格情報を使用してください。

このメソッドでは、機密情報を復号化する機能し、ユーザーがキーの要件を満たします。ただし、このメソッドがありますが制限成功現在のユーザーと現在のコンピューターに SSIS パッケージのユーザー キーが含まれるので。 したがって、別のコンピューターにパッケージを移動すると、このメソッド可能性がありますも失敗、ジョブ ステップが正しいプロキシ アカウントを使用する場合でも。


方法 2: ServerStorage を SSIS パッケージの ProtectionLevel プロパティを設定します。
ServerStorage を SSIS パッケージのProtectionLevelプロパティを変更します。この設定では、パッケージを SQL Server データベースに格納し、SQL Server データベース ロールによってアクセス制御が可能します。

方法 3: EncryptSensitiveWithPassword に、SSIS パッケージの ProtectionLevel プロパティを設定します。
SSIS パッケージのProtectionLevelプロパティを EncryptSensitiveWithPassword に変更します。この設定は、暗号化のパスワードを使用します。 このパスワードは、SQL Server エージェント ジョブ ステップ コマンド行を変更できます。


方法 4: 使用して SSIS パッケージの構成ファイル
SSIS パッケージの構成ファイルを使用して、機密性の高い情報を格納して、これらの構成ファイルをセキュリティで保護されたフォルダーに保存します。 パッケージが暗号化されていないと、パッケージに機密情報を保存しようとはしないように、DontSaveSensitive にProtectionLevelプロパティを変更することができます。SSIS パッケージを実行すると、必要な情報が構成ファイルから読み込まれます。機密情報が含まれている場合に、構成ファイルを適切に保護されていることを確認します。


方法 5: パッケージ テンプレートを作成します。
長期的な解決では、既定の設定とは異なる保護レベルを使用するパッケージ テンプレートを作成します。この問題は発生しません将来的にパッケージします。

状況


これは仕様による動作です。

詳細情報


問題を再現する手順を実行します。

  1. SQLServer2005SQLAgentUser グループの一部ではないユーザーとしてログインします。たとえば、ローカル ユーザーを作成できます。
  2. 、SSIS パッケージを作成して、によってタスクを追加し、します。Msdb をローカル ファイルに次の文字列を使用して、OLE DB 接続マネージャーを使用して: 'Windows 認証' SQLSourceType:「直接入力」連結:「sp_who」
  3. パッケージを実行して正常に実行されるかどうかを確認します。
  4. ProtectionLevelプロパティを EncryptSensitiveWithPassword に設定されていることを確認します。
  5. SQL Server エージェント ジョブとジョブ ステップを作成します。として実行] の一覧で、ジョブ ステップを実行するSQL Server エージェント サービスをクリックします。
SQL Server エージェント ジョブ ヒストリ内のテキストには、次のような情報が表示されます。

パッケージの機密情報を復号化します。

SSIS パッケージのProtectionLevelプロパティの既定の設定は、EncryptSensitiveWithUserKey です。パッケージを保存すると、SSIS は、「機密性の高い、」パスワード、ユーザー名、および接続文字列のようにマークされているプロパティが含まれているパッケージの部分のみを暗号化します。したがって、パッケージが読み込まれるときに現在のユーザーのユーザーは、復号化する重要なプロパティの暗号化要件を満たす必要があります。ただし、現在のユーザーは、パッケージをロードするのには暗号化の要件を満たすためにはありません。SQL Server エージェント ジョブ ステップからパッケージを実行すると、既定のアカウントは、SQL Server エージェント サービス アカウントです。この既定のアカウントは、パッケージ作成者より別のユーザーでは可能性があります。したがって、SQL Server エージェント ジョブ ステップ ロードでき、ジョブ ステップの実行を開始、接続を完了できないので、パッケージが失敗します。たとえば、パッケージでは、OLE DB 接続または FTP 接続を完了できません。接続に必要な資格情報を復号化できないために、パッケージが失敗します。


重要 開発プロセスと取引先企業が必要し、各コンピューター上で使用を決定するための環境を検討してください。ProtectionLevelプロパティの EncryptSensitiveWithUserKey の設定は、強力な設定です。最初の展開の複雑な問題が発生するため、この設定は無視されませんする必要があります。適切なアカウントにログインしている場合は、パッケージを暗号化できます。.Cmd ファイルと SQL Server エージェント コマンド サブシステムを使用して保護レベルを変更するのには、Dtutil.exe SSIS コマンド プロンプト ユーティリティを使用することもできます。たとえば、以下の手順です。バッチ ファイルでループの Dtutil.exe ユーティリティを使用することができますのでする次の手順のいくつかのパッケージを同時にします。
  1. パスワードを使用して暗号化を使用するパッケージを変更します。
  2. ProtectionLevelプロパティを EncryptSensitiveWithUserKey に変更するのには、オペレーティング システム (コマンド実行)の SQL Server エージェント ジョブ ステップによって Dtutil.exe ユーティリティを使用します。このプロセスでは、パスワードを使用して、パッケージを再度暗号化して、パッケージの暗号化を解除します。パッケージを暗号化するために使用されているユーザー キーでは、SQL Server エージェント ジョブ ステップとして実行] ボックスの一覧で設定します。

    注: キーには、ユーザー名とコンピューター名が含まれているため別のコンピューターにパッケージを移動するための効果が制限される可能性があります。

SSIS パッケージの失敗に関するエラー情報の詳細なことになっていることを確認します。

SQL Server エージェント ジョブ ヒストリの詳細情報の一部ではなく、SSIS パッケージの失敗に関するエラー情報があるかどうかを確認するのにはログの SSIS を使用できます。SSIS サブシステム コマンドの代わりに、exec サブシステム コマンドを使用してパッケージを実行することもできます。

SSIS ログについて

SSIS ログおよびログ プロバイダーを使用して、パッケージを実行し、エラーに関する詳細情報をキャプチャできます。既定では、パッケージには、情報は記録されません。情報をログに記録するパッケージを構成する必要があります。情報をログに記録するパッケージを構成すると、次のような詳細情報が表示されます。この例では、アクセス許可の問題であることがわかります。

OnError、ドメイン名、ドメイン名 \、FTP Task,{C73DE41C-D0A6-450A-BB94-DF6D913797A1},{2F0AF5AF-2FFD-4928-88EE-1B58EB431D74},4/28/2006 1時 51分: 59 PM、2006 年 4 月 28 日午後 1時 51分: 59、-1073573489、0 x、「FTP 接続マネージャー」を使用して FTP サーバーに接続しますできません。

OnError、ドメイン名、ドメイン名 \、Execute SQL Task,{C6C7286D-57D4-4490-B12D-AC9867AE5762},{F5761A49-F2F9-4575-9E2B-B3D381D6E1F3},4/28/2006 4時 07分: 00 PM、2006 年 4 月 28 日 4時 07分: 00 PM、-1073573396、0 x、"user01.msdb"の接続を取得できませんでした。接続が正しく構成されていないか、この接続上の適切なアクセス許可がない可能性があります。

Exec サブシステム コマンドに関する情報を出力し、

Exec サブシステム コマンドのアプローチを使用すると、SSIS のコマンドラインは、Dtexec.exe SSIS コマンドラインの実行可能ファイルを呼び出すためにスイッチのログ詳細のコンソールを追加します。さらに、出力ファイルの高度なジョブ機能を使用します。ファイルまたは SQL Server エージェント ジョブ ヒストリにログ情報をリダイレクトするのには、[履歴にステップ出力を含める] オプションを使用することもできます。

コマンド行の例は次のとおりです。
 
dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF  /REPORTING V  /CONSOLELOG NCOSGXMT 


/Console ログには、以下のような詳細情報が返されます。
 
Error: 2006-04-27 18:13:34.76   Code: 0xC0202009   Source: AgentTesting Connection manager "(local).msdb"   Description: An OLE DB error has occurred. Error code: 0x80040E4D.An OLE DB record is available.  Source: "Microsoft SQL Native Client"  Hresult: 0x80040E4D  Description: "Login failed for user 'DOMAINNAME\username'.".End Error 
 
Error: 2006-04-28 13:51:59.19   Code: 0xC0016016   Source:     Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available.End Error 
 
Log:     Name: OnError     Computer: COMPUTERNAME     Operator: DOMAINNAME\username     Source Name: Execute SQL Task     Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762}     Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8}     Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.     Start Time: 2006-04-27 18:13:34     End Time: 2006-04-27 18:13:34End Log 

関連情報


同様の問題については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

904800 SQL Server 2005 で SQL Server 2005 の統合サービス パッケージを実行しようとするときに「読み込み中にエラー」エラー メッセージが表示されます。

バッチ処理で、Dtutil.exe ユーティリティを使用する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

906562よりユーティリティ (Dtutil.exe) を使用して、SQL Server 2005 の一連の SQL Server の統合サービス (SSIS) パッケージの保護レベルを設定する方法

パッケージ テンプレートを作成する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

908018 SQL Server ビジネス インテリジェンス開発 Studio でパッケージ テンプレートを作成する方法



SSIS パッケージのセキュリティと、 ProtectionLevelプロパティの詳細については、SQL Server 2005 Books Online の「統合サービスのセキュリティに関する考慮事項」を参照してください。

残念ながら、ユーザーは、既定のエージェント ジョブ ステップの設定内に配置される、この状態に注意してください。SQL Server エージェント プロキシ」および「SSIS の詳細については、SQL Server 2005 Books Online の以下のトピックを参照してください。
  • SQL Server エージェントでパッケージの実行をスケジュール設定
  • SQL Server エージェント プロキシを作成します。