大規模なSSIS展開の一部として、問題なく(SQL Serverエージェント経由で)夜間に実行される2つのSSISパッケージがあります。すべてがWindows認証を使用しており、スケジュールされたジョブはsysadmin(私も)によって所有され、SQL Serverエージェントサービスアカウントとして実行されます。
そのため、データは基本的にsource system ~> transit db ~> staging ~> NDS
一晩で処理されます。
私はハンドル、気に2つのSSISパッケージtransit db ~> staging
とstaging ~> NDS
データの特定のセットのために、それぞれの部品。
ドメインユーザー(sysadmin以外)が何かを実行し、source system
興味深いデータをにプッシュするtransit db
ため、勤務時間中にこの更新されたデータをフェッチして更新する方法が必要NDS
です。この人にとって最も簡単な方法は、そのETLは、マクロ対応のExcelブックのボタンをクリックすることで、ODBCを介してSQL Serverに接続し(Windows認証を使用)、ストアドプロシージャを実行します。
ストアドプロシージャは次のようになります。
create procedure dbo.UpdateMaterialInventory
as
begin
execute msdb.dbo.UpdateMaterialInventory;
end
[msdb]の「姉妹」ストアドプロシージャは次のようになります。
create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory';
end
この[SqlAgentProxy]ユーザーは、ドメインユーザーのログインから[msdb]で作成したWindowsユーザーでexecute
、このUpdateMaterialInventory
プロシージャへのアクセス許可を付与しました。これにより、ドメインユーザーににexecute
許可を与える必要がなくなりますmsdb.dbo.sp_start_job
。
SQL AgentジョブNDS-ManualMaterialInventory
はドメインユーザーが所有し、2つのステップがあり、それぞれ[SQL Server Integration Servicesパッケージ]タイプで[別のユーザーとして実行 ]に設定されていますSSISProxy
。
SSISProxy
資格情報名を使用して、[SQL Server Integration Services Package]サブシステムにマップされるSQL ServerエージェントプロキシですSSISProxyCredentials
。ドメインユーザーのログインは、プロキシアカウントプリンシパルに追加されました。
SSISProxyCredentials
で作成されたアイデンティティ一晩全体SSISのETLを実行している同じドメインのユーザーの、およびそのパスワードは四重にチェックしました。
さて、これを実行すると:
execute as login=N'DOMAIN\thatperson'
exec NDS.dbo.UpdateMaterialInventory;
go
私はこの出力を取得します:
Job 'NDS-ManualMaterialInventory' started successfully.
しかし、仕事の歴史は非常に期待の持てない物語を語っています。
The job failed. The Job was invoked by User DOMAIN\thatperson.
The last step to run was step 1 (Extract).
ステップ1の詳細:
Executed as user: {domain user that runs SSIS ETL overnight}.
Microsoft (R) SQL Server Execute Package Utility Version 12.0.4100.1 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
Started: 2:18:50 PM Failed to execute IS server package because of error 0x80131904.
Server: {server name}, Package path: \SSISDB\Foo\Bar\foobar.dtsx, Environment reference Id: NULL.
Description: Login failed for user '{domain user that runs SSIS ETL overnight}'.
Source: .Net SqlClient Data Provider
Started: 2:18:50 PM Finished: 2:18:51 PM Elapsed: 0.094 seconds.
The package execution failed.
The step failed.
ジョブは失敗し、何もログに記録されません。
ジョブの所有者を自分自身に変更し、ステップの実行を SQL Serverエージェントサービスアカウントとして変更すると、ジョブは実行され、成功し、1,067行を[Metadata]。[dbo]。[sysssislog]に記録します。
プロキシ/クレデンシャルの設定方法について正しくないことがあるようです。どの部分が間違っていますか?