ความแตกต่างระหว่าง EXECUTE AS USER และ EXECUTE AS LOGIN ที่ทำให้อันที่สองทำงานโดยไม่คาดหมายคืออะไร


10

เมื่อเร็ว ๆ นี้ฉันใช้ EXECUTE AS LOGIN เพื่อตรวจสอบว่าบางคนสามารถหรือไม่สามารถใช้ฟังก์ชันตารางในฐานข้อมูลของเรา การทดสอบแสดงให้เห็นว่าเขาทำได้ แต่เขารายงานความล้มเหลวซ้ำ ๆ

บุคคลนั้นใช้ชื่อเข้าสู่ระบบ 'WEB' เพื่อเชื่อมต่อกับฐานข้อมูลและมีผู้ใช้ 'เว็บ' ในฐานข้อมูลที่เกี่ยวข้องกับชื่อเข้าสู่ระบบ 'เว็บ' ดังนั้นฉันจึงลองใช้สคริปต์ต่อไปนี้:

-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

และ

-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

ส่วนแรกใช้ได้กับผลลัพธ์ของ:

เว็บ | เว็บ | เว็บ | เว็บ

แต่ผลลัพธ์ที่สองค่อนข้างสับสน:

dbo | เว็บ | เว็บ | เว็บ

ความแตกต่างระหว่าง EXECUTE AS USER และ EXECUTE AS LOGIN ทำให้ครั้งที่สองล้มเหลวคืออะไร นอกจากนี้แน่นอนคนแรกที่เป็นระดับฐานข้อมูลและคนที่สองเป็นการเลียนแบบระดับเซิร์ฟเวอร์ของสิ่งที่ฉันรู้และไม่ได้อธิบายสถานการณ์ที่นี่


สิ่งที่สองไม่ใช่ "ล้มเหลว" แต่เป็นเพียงการบอกคุณว่าการเข้าสู่ระบบมีการกำหนดบทบาทเซิร์ฟเวอร์ (ระบบดูแล) คุณตรวจสอบสคีมาที่ผู้ใช้ร้องขอหรือไม่ หากว่าก่อนหน้านี้ที่ซึ่ง schema ที่เป็นค่าเริ่มต้น dbo ไม่ใช่ devs ที่คาดไว้ แก้ไขได้ดีขึ้นในรหัสโดยอ้างอิงตารางอย่างเต็มที่
Stuart Moore

คำตอบ:


7

สมาชิกของsysadminกลุ่มจะถูกแมปเสมอdboแม้ว่าจะมีผู้ใช้ที่ชัดเจนในฐานข้อมูล ดังนั้นดูเหมือนว่าการเข้าสู่ระบบWEBเป็นสมาชิกsysadminดังนั้นจึงUSER_NAME()ส่งกลับอย่างถูกต้องdboในกรณีที่สอง


ตรวจสอบและยืนยัน มันเป็นสมาชิกของระบบดูแลระบบแน่นอน มันกลับกลายเป็นว่ารายงานนี้ได้มาถึงหนึ่งในนักพัฒนาคนอื่น ๆ และแทนที่จะแก้ปัญหาที่ถูกต้องเขาเพียงแค่กำหนดบทบาทการดูแลระบบเข้าสู่ระบบ ฉันจะไม่คิดถึงสิ่งที่เกิดขึ้นนั้นฉันผิดหวังอย่างแท้จริง เราจะพูดกันอย่างจริงจังเมื่อเขากลับมา เรียนรู้สิ่งใหม่วันนี้ขอบคุณ
gemisigo

นอกจากนี้ยังหมายความว่าใบสมัครของคุณ (รายงาน?) มีการแอบอ้างเป็นสมาชิกของระบบดูแลระบบ ดูว่าการมอบสิทธิ์นี้ให้ลำดับขั้นอย่างไร มีความเป็นไปได้ว่าแม้ตอนนี้รายงานจะสามารถปลอมตัวเป็นsysadminสมาชิกรายอื่นได้ดังนั้นหากแอปพลิเคชันการรายงานนั้นเป็น sysadmin แบบพฤตินัย กล่าวคือ ia เป็นไปได้ในการยกระดับสิทธิ์ในการโจมตีเวกเตอร์สามารถใช้แฮกเกอร์หรือพนักงานของคุณได้
Remus Rusanu

หากแอพ repor ได้รับอนุญาตจาก IMPERSONATE WEBและWEBถูกลบออกจากsysadminนั้นประตูจะปิด แต่คุ้มค่าที่จะตรวจสอบไม่มีน้อย
Remus Rusanu

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