ให้ปฏิเสธการให้สิทธิ์ซ้อน


9

สำหรับบทบาทdb_denycustomerฉันต้องการเฉพาะคอลัมน์รหัสของตารางลูกค้าที่สามารถเลือกได้และไม่มีรายการอื่น ๆ ดังนั้นฉันจึงทำสิ่งนี้:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer

... และมันก็ใช้ได้ดี เย็น! แต่ทำไม ?

สิ่งที่ฉันได้อ่านในบทความที่เกี่ยวข้องคือสแต็คการอนุญาต แต่DENYมีความสำคัญกว่า ในทางตรงกันข้ามในกรณีของฉันดูเหมือนว่า "การสืบค้น" การอนุญาตครั้งล่าสุดมีความสำคัญกว่า แน่นอนถ้าฉันดำเนินการในลำดับย้อนหลังหลังDENYจะซ่อนคอลัมน์รหัสด้วย

คุณช่วยอธิบายเรื่องนี้ได้ไหม

ฉันได้รวมค่าเริ่มต้นdb_datawriterและdb_datareaderบทบาทให้กับผู้ใช้ที่ฉันทดสอบด้วย

คำตอบ:


10

นี่เป็นพฤติกรรมที่บันทึกไว้เพื่อความเข้ากันได้ย้อนหลัง เอกสารที่ตัดตอนมา:

ข้อควรระวัง DENY ระดับตารางไม่ได้มีความสำคัญเหนือกว่า GRANT ระดับคอลัมน์ ความไม่สอดคล้องกันนี้ในลำดับชั้นสิทธิ์ได้รับการเก็บรักษาไว้เพื่อความเข้ากันได้แบบย้อนหลัง

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