การดำเนินการของ SQL Server เป็นปัญหา


13

EXECUTE ASฉันหายไปบางสิ่งบางอย่างในขณะที่พยายามที่จะทำให้การใช้งานขั้นตอนของฉันเก็บไว้ ขั้นตอนการจัดเก็บไว้อ่านข้อมูลจากมวลรวมและส่งผลให้ร้านค้าsource_dbtarget_db

ตัว sp อยู่target_dbค่ะ ฉันมีการเข้าสู่ระบบโดยเฉพาะและแมปกับผู้ใช้ทั้งในsource_dbและtarget_dbสำหรับเจ้าของของ sp (ดังนั้นจึงมีผู้ใช้app_agentในsource_dbและในtarget_dbการเข้าสู่ระบบapp_agent)

หากฉันเข้าสู่ระบบในฐานะapp_agentและดำเนินการ

EXEC target_db.app_agent_schema.import_data

ทุกอย่างทำงานได้ดี แต่ถ้าฉันเปลี่ยน

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

และลองใช้งานมันมันจะพ่น

เซิร์ฟเวอร์หลัก "app_agent" ไม่สามารถเข้าถึงฐานข้อมูล "source_db" ภายใต้บริบทความปลอดภัยปัจจุบัน

ฉันใช้ SQL Server 2008

ใครช่วยชี้ให้เห็นข้อผิดพลาดของฉัน?

ขอบคุณ

อัปเดต หลังจากทำวิจัยบางอย่างฉันพบว่าการALTER DATABASE target_db SET TRUSTWORTHY ONแก้ปัญหา แต่ดูเหมือนจะไม่ใช่วิธีที่เหมาะสมสำหรับฉัน ...


1
ฉันคิดว่าคำตอบคือการใช้ฐานข้อมูลความเป็นเจ้าของโซ่ตัวเลือกข้ามฐานข้อมูลระดับ ฉันสามารถสร้างข้อผิดพลาดซ้ำอีกครั้งในสถานการณ์ของคุณ แต่มีรายละเอียดไม่เพียงพอที่จะรู้ว่าฉันทำซ้ำหรือไม่ ... ตัวเลือก CDOC ไม่ได้ผลสำหรับฉัน แต่ลองใช้ดูว่าเป็นไปได้ไหม
Jon Seigel

คำตอบ:


24

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

มีวิธีแก้ไขสองวิธีซึ่งทั้งสองอธิบายไว้ในบทความที่ลิงก์ด้านบน:

  • ALTER DATABASE [source_db] SET TRUSTWORTHY ON;หนึ่งที่ง่ายคือการทำเครื่องหมายที่น่าเชื่อถือฐานข้อมูล: แม้ว่าง่ายนอกจากนี้ยังเป็นอันตรายในขณะที่มันทำให้dboของพฤตินัยsource_dbsysadmin

  • ส่วนที่ปลอดภัยคือใช้การเซ็นรหัสดูการเรียกขั้นตอนในฐานข้อมูลอื่นสำหรับตัวอย่าง สิ่งนี้ซับซ้อนกว่า แต่มีความปลอดภัย buletproff 100%


0

ผู้ใช้คนใดที่รันคำสั่ง ALTER PROCEDURE อาจตั้งค่าระดับการเข้าถึงของเจ้าของ (ตนเอง) ให้กับผู้ใช้นั้นไม่ใช่ระดับที่คุณต้องการ


ผู้ใช้เดียวกันกับที่สร้างโพรซีเดอร์ ( app_agent) ถ้าฉันมีโพรซีเดอร์ที่สร้างโดยapp_agentไม่มีexecute as owner/selfให้ล็อกอินในฐานะapp_agentSP ดำเนินการอย่างถูกต้อง ถ้าฉันเพิ่มEXECUTE AS SELF(อีกครั้งเป็นผู้ใช้คนเดียวกัน) และเข้าสู่ระบบเหมือนapp_agentเดิมฉันจะได้รับ...is not able to access the database...
a1ex07
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.