SQLAgentジョブを介して実行されるSSISパッケージがあります。ASP.NET Webページ内から(sp_startjobを介して)ジョブを開始しています。UIにログオンするユーザーは、ユーザーが開始するSSISパッケージでログに記録する必要があります。したがって、userIdをSSISパッケージに渡す必要があります。問題は、sp_startjobにパラメーターを渡すことができないことです。
これをどのように達成できるか、および/または上記のアプローチの代替案を知っている人はいますか?
SQLAgentジョブを介して実行されるSSISパッケージがあります。ASP.NET Webページ内から(sp_startjobを介して)ジョブを開始しています。UIにログオンするユーザーは、ユーザーが開始するSSISパッケージでログに記録する必要があります。したがって、userIdをSSISパッケージに渡す必要があります。問題は、sp_startjobにパラメーターを渡すことができないことです。
これをどのように達成できるか、および/または上記のアプローチの代替案を知っている人はいますか?
sp_startjob では実行できません。パラメータをジョブステップに渡すことはできないため、そのオプションはアウトです。
同時実行性について懸念がなく、同時に同じジョブを実行できない場合は、ジョブ ステップを SQL Server Integration Services から OS コマンドなどに変更することでハッキングできる可能性があります。Web ページが作成/変更するバッチ スクリプトを OS コマンドに呼び出させます。この時点で、パッケージdtexec.exe /file MyPackage /Set \Package.Variables[User::DomainUser].Properties[Value];\"Domain\MyUser\"
内の変数 DomainUser の値は Domain\MyUser になります。
あなたの要件がわからないので、.NET フレームワークを呼び出して、Web ページからパッケージを開始するだけでよいでしょう。おそらく非同期で呼び出すことを確認したいでしょうが。そうしないと、SSIS パッケージが非常に高速でない限り、ユーザーは別の場所に移動しようとしたり、スパムの更新などを行って、ページが「機能する」のを待っている可能性があります。
ところで、これらはすべて SSIS パッケージに値をプッシュするだけです。この場合は、ユーザー名です。資格情報は渡されないため、次のようなものを呼び出すとSYSTEM_USER
、SQL エージェントのユーザー アカウント (またはジョブ ステップのオペレーター) が報告されます。