การดำเนินการแพคเกจ SSIS จากขั้นตอนการจัดเก็บที่มีสิทธิ์ของผู้ใช้ที่แตกต่างกัน


14

ฉันมีปัญหากับการอนุญาตให้ผู้ใช้ของฉันเรียกใช้งาน SSIS Packages ในลักษณะที่เหมาะสมเนื่องจากต้องการระดับสิทธิ์ที่แตกต่างกัน

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

แพคเกจนี้ดำเนินการพิเศษที่มีสิทธิพิเศษรวมถึงการสำรองฐานข้อมูลในช่วงเริ่มต้นของการรัน (เพื่อให้แน่ใจว่าแน่ใจ) ปล่อยและสร้างตารางจากการคำนวณเป็นต้น

ฉันได้เขียนขั้นตอนการจัดเก็บไว้เพื่อใช้งานนี้ผ่าน [SSISDB] [แคตตาล็อก] [create_execution] และ [SSISDB] [แคตาล็อก] [ขั้นตอนการเริ่มต้น / จัดเก็บ] [วิธีการจัดเก็บเริ่มต้น ... (ฉันเป็นผู้ดูแลระบบ)

กระบวนงานที่เก็บไว้ล้มเหลวเมื่อเรียกใช้โดยผู้ใช้ปกติเนื่องจากสิทธิ์ระดับสูงที่จำเป็นใน SSISDB และ MSDB เพื่อจัดคิวการดำเนินการและแพคเกจเองล้มเหลวเนื่องจากกำลังทำงานภายใต้บริบทความปลอดภัย (ต่ำ)

สิ่งที่ฉันได้ลอง :

ฉันพยายามแก้ไขปัญหาโดยใช้ 'ดำเนินการเป็น' ในขั้นตอนการจัดเก็บอย่างไรก็ตามสิ่งนี้ล้มเหลวเนื่องจากปัญหาการโยงข้ามฐานข้อมูลการตั้งค่าสถานะที่น่าเชื่อถือเป็นต้น

ฉันยังพยายามแก้ไขปัญหาด้วยการให้ตัวแทนงานเรียกใช้แพคเกจและเพียงแค่เรียกใช้งานตัวแทนจากขั้นตอนการจัดเก็บ แต่ฉันเข้าสู่โลกแห่งความเจ็บปวดที่เกี่ยวข้องอย่างรวดเร็ว:

  • ไม่สามารถตั้งค่าการอนุญาตให้ใช้งานได้สำหรับแต่ละงาน
  • ความหวังในการกำหนดค่าการเข้าถึงนี้ผ่าน Server บทบาทกลางเพื่อรองรับการเปลี่ยนแปลงพนักงานเมื่อเวลาผ่านไปและงานสามารถมีผู้ใช้เพียงคนเดียวในฐานะเจ้าของ
  • โลกมืดของบัญชีพร็อกซีหนังสือรับรองร่วมกับการลงชื่อเข้าใช้ sql-auth เป็นต้น

แผน C และ D

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

ดังนั้น....

มีคำแนะนำใด ๆ เกี่ยวกับวิธี:

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

ฉันเข้าใจว่ามีชิ้นส่วนที่เคลื่อนไหวจำนวนมากอยู่ที่นี่ (และบางคนรู้สึกเหมือนใบมีดหมุน) ดังนั้นแจ้งให้เราทราบหากมีข้อมูลอื่น ๆ ที่คุณรู้สึกว่าฉันพลาด

ไชโยทิม

แก้ไข ....

ดังนั้นวันนี้ฉันสร้างการเข้าสู่ระบบ SQL Server โดยเฉพาะด้วยสิทธิ์ ssis_admin สร้างงาน SQL Server Agent สามงานที่เป็นเจ้าของโดยผู้ใช้นั้นและปรับปรุงขั้นตอนการจัดเก็บที่ผู้ใช้ปลายทางของฉันโทรหาexecute asผู้ใช้นั้น สิ่งนี้ล้มเหลวเนื่องจากไม่สามารถเรียกcreate executionการเข้าสู่ระบบของเซิร์ฟเวอร์ SQL ได้ต้องใช้บัญชี windows

ฉันอัปเดตขั้นตอนการจัดเก็บผู้ใช้ไปexecute asยังบัญชี Windows SQL Server ทำงานเป็น (บัญชีบริการโฆษณา) ได้รับสิทธิ์ssis_adminและล้มเหลวพร้อมข้อผิดพลาด

ไม่สามารถเปลี่ยนบริบทความปลอดภัยปัจจุบันได้ โปรดเปลี่ยนเป็นฐานข้อมูลดั้งเดิมที่มีการเรียกใช้ 'ดำเนินการเป็น' และลองอีกครั้ง

นี่มันจะไปได้ไม่เร็วเลย :(


1) พวกเขาจะต้องเปิดตัวแพ็คเกจผ่านทางหรือไม่create_execution เช่นพวกเขาจำเป็นต้องระบุพารามิเตอร์ในการดำเนินการสำหรับ "สถานการณ์พร้อมของข้อมูลหรือไม่" 2) ปลอดภัยที่จะสมมติว่าคุณไม่สนใจที่จะวางบทบาท ssis_admin หรือไม่
billinkc

1) ฉันใช้create_executionเพราะฉันต้องผ่านพารามิเตอร์ (หนึ่งในสามค่า) จาก sproc ไปยังงาน ฉันมีความสุขที่มีสาม sprocs / งาน ฯลฯ ถ้าแก้ได้ 2) ถ้า ssis_admin เป็นบทบาทสิทธิ์ต่ำสุดที่ทำให้ฉันอยู่ที่นั่นฉันเปิดให้มัน ... มันดีกว่า sysadmin อย่างน้อยและแก้ปัญหาพวกเขาโดยไม่ตั้งใจวาง / nuking ตารางคลังสินค้าในการใช้งานทั่วไป
Wokket

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

ฉันคิดว่าความเสี่ยงน้อยที่สุดจะมีงานที่เขียนรหัสยาก 3 งานซึ่งใช้การผสมผสานที่ถูกต้องของผู้ใช้ / บัญชีที่ได้รับการรับรองเพื่อให้ได้สถานะที่มีสิทธิ์น้อยที่สุด แล้วผมดูทั้งอนุญาตให้ผู้ใช้สามารถในการใช้งานหรือถอดที่สร้างสาม procs ว่าการใช้งานเพื่อให้พวกเขาในการเรียกใช้งานเฉพาะทางEXECUTE AS sp_start_jobกล่าวว่าคนที่แต่งตัวประหลาดอินเทอร์เน็ตแบบสุ่มที่น่ากลัวในการรักษาความปลอดภัย
billinkc

@billinkc ฉันคิดว่า ssis_operator จะทำอย่างไร
Tom V - ลอง topanswers.xyz

คำตอบ:


2

เพื่อลูกหลานฉันได้ทำงานผ่านทางต่อไปนี้

  • การเปลี่ยนแปลงขั้นตอนการจัดเก็บที่เรียกโดยผู้ใช้ ( Admin.RunImport) เป็น 'ดำเนินการเป็น' บัญชีที่ใช้โดยบริการ SQL
  • บัญชีบริการ SQL Server (บัญชี AD Managed Service) ได้รับการแก้ไขให้มีสิทธิ์ในการดำเนินการ sproc ของผู้ดูแลระบบที่อนุญาตให้ใช้งานได้execute asด้านบน
  • บัญชีบริการ SQL Server ถูกปรับเปลี่ยนให้มีบทบาท ssisdb.ssis_admin และ msdb.SQlAgentOperator
  • Admin.RunImportโพรซีเดอร์ที่เก็บไว้นี้จัดคิวหนึ่งใน 3 งานตัวแทนโดยใช้sp_start_jobขึ้นอยู่กับพารามิเตอร์ที่ส่งผ่าน
    • การเปลี่ยนเส้นทางนี้ผ่านทางตัวแทนของ SQL จะต้องมีการข้ามข้อผิดพลาดบริบทความปลอดภัยของ ssis ข้างต้น
    • งานตัวแทนเป็นของ 'sa' และเพียงแค่ดำเนินการขั้นตอนการจัดเก็บ ( Raw.hp_Execute_Import_Impl) ผ่านในพารามิเตอร์ที่แตกต่างกันต่องาน
    • ซึ่งหมายความว่างานตัวแทนทำงานตามsaเนื่องจาก ssis_admin privelege ด้านบนเหมือนกับงานที่กำหนดเวลาไว้
  • Raw.hp_Execute_Import_Implเก็บไว้คิวขั้นตอนการแพคเกจ SSIS เป็นsaเหมือนกันตามปกติ

แทนที่จะสามารถสร้างบัญชี windows เฉพาะสำหรับวัตถุประสงค์นี้ฉันคิดว่าดีเท่าที่ฉันจะได้รับในขณะนี้

ขอบคุณสำหรับความช่วยเหลือ!


2
ขอบคุณที่กลับมาและโพสต์โซลูชัน ตอนนี้เมื่อคุณมีปัญหานี้อีกครั้งและลืมสิ่งที่คุณทำคุณสามารถค้นหาบนเว็บและคุณจะพบทางออกของคุณเอง!
Nick.McD เงือก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.