การเรียกใช้แพคเกจ SSIS จากงาน SQL Agent ที่เป็นเจ้าของโดยผู้ใช้โดเมนที่ไม่ใช่ sysadmin


16

ฉันมีแพคเกจ SSIS สองชุดที่เรียกใช้งานข้ามคืน (ผ่านทางตัวแทนของเซิร์ฟเวอร์ SQL) ซึ่งเป็นส่วนหนึ่งของการปรับใช้ SSIS ที่ใหญ่กว่าโดยไม่มีปัญหาใด ๆ ทุกอย่างใช้การรับรองความถูกต้องของ Windows และงานที่กำหนดเวลาเป็น sysadmin (ดีฉัน) และทำงานเป็นบัญชีบริการตัวแทนของเซิร์ฟเวอร์ SQL

ดังนั้นข้อมูลจึงsource system ~> transit db ~> staging ~> NDSค้างคืน

SSIS สองแพ็คเกจที่ฉันสนใจจัดการtransit db ~> stagingและstaging ~> NDSส่วนต่าง ๆ ตามลำดับสำหรับชุดข้อมูลเฉพาะ

ผู้ใช้โดเมน (ไม่ใช่ผู้ดูแลระบบ) ทำอะไรในsource systemและผลักดันข้อมูลที่น่าสนใจเข้ามาtransit dbดังนั้นฉันต้องการวิธีที่จะดึงข้อมูลที่อัปเดตนี้ในระหว่างชั่วโมงทำงานเพื่ออัปเดตNDS: มีการตัดสินใจว่าวิธีที่ง่ายที่สุดสำหรับบุคคลนี้ในการเรียก ETL นั้นโดยคลิกปุ่มในสมุดงาน Excel ที่เปิดใช้งานแมโครซึ่งเชื่อมต่อกับ SQL Server ผ่าน ODBC (โดยใช้การพิสูจน์ตัวจริงของ Windows) และดำเนินการตามขั้นตอนที่เก็บไว้

กระบวนงานที่เก็บไว้มีลักษณะดังนี้:

create procedure dbo.UpdateMaterialInventory
as
begin
    execute msdb.dbo.UpdateMaterialInventory;
end

กระบวนการ "sister" ที่เก็บไว้ใน [msdb] มีลักษณะดังนี้:

create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
    execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory';
end

ผู้ใช้ [SqlAgentProxy] นี้เป็นผู้ใช้ Windows ที่ฉันสร้างขึ้นใน [msdb] จากการเข้าสู่ระบบของผู้ใช้โดเมนซึ่งฉันได้รับexecuteอนุญาตให้ใช้UpdateMaterialInventoryขั้นตอนนี้ วิธีนี้หลีกเลี่ยงการให้สิทธิ์ผู้ใช้โดเมนexecuteแก่msdb.dbo.sp_start_jobซึ่งจะมากเกินไป

งานตัวแทนของ SQL NDS-ManualMaterialInventoryเป็นเจ้าของโดยผู้ใช้โดเมนและมีขั้นตอนที่ 2 แต่ละประเภท [SQL Server บูรณาการแพคเกจบริการ] จัดตั้งขึ้นเพื่อเรียกใช้ในฐานะ SSISProxy

SSISProxyเป็นพร็อกซี่ตัวแทนของเซิร์ฟเวอร์ SQL ที่แมปไป [SQL Server Integration Services Package] 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 งานจะทำงานสำเร็จและบันทึก 1,067 แถวเป็น [Metadata] [dbo]. [sysssislog]

ดูเหมือนว่ามีบางอย่างไม่ถูกต้องเกี่ยวกับวิธีการตั้งค่าพร็อกซี / ข้อมูลรับรอง ฉันทำผิดส่วนไหน

คำตอบ:


18

ปัญหาดูซับซ้อนกว่าที่เป็นอยู่ เนื่องจากคุณใช้ SQL 2014 คุณอาจถูกกัดด้วยคุณลักษณะความปลอดภัยใหม่ที่นำมาใช้ในปี 2012

สิ่งเดียวที่สำคัญคือ:

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}'.

การเข้าสู่ระบบของผู้ใช้พร็อกซีของคุณส่วนใหญ่ไม่มีสิทธิ์เข้าถึงแคตตาล็อก SSISDB (แม้ว่าเขาอาจมีการเข้าถึง SQL Server)
คุณต้องแมปล็อกอินกับผู้ใช้ SSISDB และกำหนดค่าการเข้าถึงโฟลเดอร์ / โครงการ SSISDB ใน Integration Services

โปรดดูที่โพสต์บล็อก MSDN นี้เคล็ดลับการควบคุมการเข้าถึงแคตตาล็อก SSISและการอนุญาตแคตตาล็อก SSIS ของ SQL 2012

เมื่อคุณโหลดแพ็คเกจจริงคุณอาจพบปัญหาด้านความปลอดภัยอื่น ๆ แต่คุณควรได้รับการบันทึกที่ดีขึ้นจากบริการการรวมตัวเอง


3
ตรงนี้ ขอขอบคุณที่ไปให้สูงกว่า :-)
Mathieu Guindon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.