대규모 SSIS 배포의 일부로 아무런 문제없이 SQL Server 에이전트를 통해 밤새 예약 된 두 개의 SSIS 패키지가 있습니다. 모든 것이 Windows 인증을 사용하고 있으며 예약 된 작업은 sysadmin (자신의 저)이 소유 하고 SQL Server 에이전트 서비스 계정 으로 실행됩니다 .
따라서 데이터는 기본적으로 source system ~> transit db ~> staging ~> NDS
밤새 진행 됩니다.
내가 관심을 갖는 두 가지 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] 사용자는 execute
이 UpdateMaterialInventory
절차에 대한 권한을 부여한 도메인 사용자의 로그인을 통해 [msdb]에서 만든 Windows 사용자 입니다. 이렇게하면에 도메인 사용자 execute
권한 을 부여 msdb.dbo.sp_start_job
할 필요가 없습니다.
SQL 에이전트 작업 NDS-ManualMaterialInventory
은 도메인 사용자가 소유하며 각각 [SQL Server Integration Services 패키지] 유형의 두 단계가 다음으로 실행으로 설정 됩니다SSISProxy
.
SSISProxy
자격 증명 이름을 사용하여 [SQL Server Integration Services 패키지] 하위 시스템에 매핑 된 SQL Server 에이전트 프록시입니다 SSISProxyCredentials
. 도메인 사용자의 로그인이 프록시 계정 사용자 에 추가되었습니다 .
이 시스템 SSISProxyCredentials
은 전체 SSIS ETL을 밤새 실행하는 동일한 도메인 사용자 의 ID 로 생성 되었으며 암호는 4 배로 확인되었습니다.
이제 이것을 실행하면 :
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]에 기록됩니다.
프록시 / 자격 증명 설정 방법에 올바르지 않은 것이있는 것 같습니다. 내가 뭘 잘못하고 있니?