ฉันกำลังมองหาวิธีที่ดีที่สุดในการปิดการเข้าถึงsys.tables
/ Information Schema
สำหรับผู้ใช้ / กลุ่มใน SQL Server
มันแสดงวิธีการปฏิเสธการเข้าถึงโดย[sys].[something]
ชอบ:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
แต่ไม่มีวิธีการปิดการเข้าถึงบนInformation Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
ดูเหมือนว่าจะไม่ทำงาน
ฉันจะปิดการใช้งานการเข้าถึง information_schema ได้อย่างไร
และมีวิธีที่ง่ายกว่าในการปิดการเข้าถึงทั้งหมดsys
/ information_schema
?
อัปเดต: ที่ จริงฉันไม่สามารถรันทั้งสองข้อความต่อไปนี้:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
ฉันพยายามเรียกใช้พวกเขาในฐานข้อมูลเฉพาะที่ผู้ใช้อยู่และฉันก็พยายามที่ "ต้นแบบ"
ฉันยังสามารถวิ่งได้:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> ยังคงส่งคืนผลลัพธ์
SELECT * from
sys.TABLES
-> ไม่มีผลลัพธ์อีกต่อไป
การรวมSCHEMA::
ในการสืบค้นทำให้สามารถสร้างความปลอดภัยได้
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
แต่ตอนนี้ฉันยังสามารถเลือกข้อมูลทั้งหมดจากฐานข้อมูล
ฉันได้ดู "Securables" -Tab ในหน้าต่างคุณสมบัติผู้ใช้ใน Management Studio 2008 ดูเหมือนว่า:
รายการที่บล็อกการเลือก sys.tables
สคีมา: sys, ชื่อ: ตาราง, ประเภท: มุมมอง
สิทธิ์สำหรับ sys.tables: สิทธิ์: เลือก, ผู้ให้สิทธิ์: dbo, ปฏิเสธการทำเครื่องหมาย
รายการที่ไม่บล็อกการเลือกใด ๆ
สคีมา :, ชื่อ: INFORMATION_SCHEMA, ประเภท: สคีมา
สิทธิ์สำหรับ INFORMATION_SCHEMA: การอนุญาต: เลือก, ผู้ให้สิทธิ์: dbo, ไม่ได้ทำการปฏิเสธ (ฉันพยายามตรวจสอบ แต่ไม่มีโอกาส .. )
การอนุญาต: เลือก, ผู้อนุญาต: INFORMATION_SCHEMA, ปฏิเสธการทำเครื่องหมาย
ฉันพยายามตั้งค่าการอนุญาตผ่าน GUI แต่แล้วฉันได้รับข้อผิดพลาดเดียวกันว่าการตั้งค่าการอนุญาตจะทำได้เฉพาะในฐานข้อมูลหลักเท่านั้น แต่ฉันไม่ได้เพิ่มผู้ใช้ / เข้าสู่ระบบให้กับการรักษาความปลอดภัยฐานข้อมูลหลัก
วิธีการแก้:
วิธีเดียวที่ฉันจะทำให้การdeny
ทำงานสำหรับinformation_schema
คือการเพิ่มผู้ใช้ไปยัง master-dbและเรียกใช้deny select
บนต้นแบบ:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
และเช่นเดียวกับในรหัสนี้สามารถเรียกใช้งานได้สำหรับตารางเดียวเท่านั้น