SQLエージェントからではなく、組み込みのSSISDBストアドプロシージャを使用して、ログインでSSISパッケージを開始しようとしています。
ログインはUbuntuボックスのAirflow DAGを介して接続するため、FreeTDS/pyodbcを使用して、Windowsログインとして認証できるようにしています。これは正常に機能しています。
ただし、パッケージを起動すると、次のことが起こります。
[SSISDB].[catalog].[start_execution] @execution_id
を使用して起動されます。同期と非同期の両方で実行してみました。[SSISDB].[catalog].[executions]
のエントリとともに ステータス5( "保留中") が生成されます。Execパラメーターを create dump files に追加しても、パッケージの実行中には何も作成されません。
ボーナス問題:1分以内に、SQLエージェントから起動され、通常は正常に機能する他のパッケージが、次のエラーメッセージで失敗することがよくあります。
実行がタイムアウトしたため、操作は失敗しました。
ノート:
[SSISDB].[catalog].[executions]
の2つのSIDフィールドは、同じサービスアカウントのSQLエージェントによって処理されている他の実行中の実行のSIDと一致します。ログインが外部SSISプロセスを起動するために使用される場合、ログインが再認証されていると思いますが、これをまだ機能させる方法がいくつかあるのではないかと期待しています。
CLRを介した呼び出しは、複雑さが増し、セキュリティに影響するため、望ましくないオプションです。
私は現在、xp_cmdshellを介してdtexecを介してそれらを起動することもテストしています(有望そうに見えます)が、どのように/なぜ機能し、ストアドプロシージャを使用しないのかは不明です。
SSISカタログの実行は接続されたログインを偽装するため、おそらく認証の問題であることが修正されます。簡単な回避策は、パッケージを実行するIDにSQL Agent Proxy をプロビジョニングし、パッケージを実行するようにエージェントジョブを構成して、ジョブを sp_start_job で呼び出すことです。
これは、xp_cmdshellを使用してdtexecを直接実行するか、Powershellからパッケージ実行プロシージャを呼び出すのと似ていますが、より安全です。どちらの場合も、パッケージの実行にはローカルIDが使用されます。