มีวิธีอนุญาตให้ผู้ใช้เข้าถึงเฉพาะมุมมองที่ไม่ใช่ระบบทั้งหมดของฐานข้อมูลหรือไม่?


9

ใน SQL Server ฉันมีผู้ใช้ในฐานข้อมูลเฉพาะและฉันถูกขอให้พวกเขาเข้าถึงมุมมองที่ไม่ใช่ระบบทั้งหมดของฐานข้อมูลเท่านั้น ฉันเชื่อว่าสามารถทำได้โดยการแก้ไข Securables ของการดูประเภทและอนุญาตให้เลือกในแต่ละมุมมอง แต่มีหลายมุมมองมากมาย มีวิธีที่มีประสิทธิภาพมากกว่านี้หรือไม่?

คำตอบ:


8

นอกจากนี้ไม่มีไวยากรณ์เช่น

GRANT SELECT ON ALL::Views TO SomeUser 

คุณสามารถGRANT SELECTใช้สิทธิ์ในแต่ละวัตถุ , สกีมาหรือทั้งฐานข้อมูลแต่ไม่กรองโดยชนิดของวัตถุที่จะรวมเฉพาะผู้ชม สำหรับภารกิจประเภทนี้ฉันอาจสร้างบทบาทใหม่ที่เรียกว่าViewReaderเพิ่มผู้ใช้ไปยังบทบาทนั้นในการรัน SSMS

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

เพื่อสร้างสคริปต์เพื่อเรียกGRANTใช้สิทธิ์ที่จำเป็น


ขอบคุณสำหรับคำตอบที่งดงามมาก สคริปต์อยู่เหนือหัวของฉันเล็กน้อยดังนั้นฉันจะอ่านก่อนที่จะพยายามนำไปใช้ ขอบคุณอีกครั้ง.
Christopher Garcia

1
@lush - สคริปต์ให้คำสั่งเพื่อตรวจทานคัดลอกวางและเรียกใช้ คุณสามารถทำอะไรที่ซับซ้อนกว่านี้เพื่อเชื่อมผลลัพธ์และEXECฉันจะไม่รบกวนงานที่ทำ
Martin Smith

ฉันเข้าใจแล้วว่านี่เป็นวิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับปัญหานี้ขอบคุณ!
Christopher Garcia

4

ฉันใช้แนวทางอื่นในกรณีของฉัน นี่คือสิ่งที่ฉันทำ:

  1. สร้างล็อกอินและแมปเข้ากับฐานข้อมูล
  2. ไปที่ฐานข้อมูลและสร้าง schema ชื่อ Public_View เช่น เจ้าของสคีมานี้จะต้องเป็นเจ้าของแบบเดียวกันกับตารางที่มีการอ้างอิงมุมมอง
  3. ให้สิทธิ์ผู้ใช้ใหม่ในการเข้าถึงสคีมาใหม่
  4. สร้างมุมมองได้มากเท่าที่คุณต้องการในสคีมาใหม่และผู้ใช้ใหม่จะสามารถเข้าถึงได้

สิ่งที่ดีคือผู้ใช้ใหม่จะไม่สามารถเข้าถึงตารางเขาจะไม่สามารถดูตารางได้

ฉันหวังว่ามันจะช่วย


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