วิธีสร้างบทบาทเซิร์ฟเวอร์แบบอ่านอย่างเดียวใน SQL Server 2012


15

ฉันให้สิทธิ์ "ดูฐานข้อมูลใด ๆ " เมื่อสร้างบทบาทเซิร์ฟเวอร์ใหม่ แต่ตระหนักว่าการอนุญาตนี้อนุญาตให้ผู้ใช้ดูฐานข้อมูลระบบเท่านั้น

ฉันกำลังพยายามสร้างบทบาทเซิร์ฟเวอร์ที่เป็นแบบอ่านอย่างเดียวและสามารถอ่านฐานข้อมูลใด ๆ

มีวิธีการสร้างบทบาทเซิร์ฟเวอร์ที่ผู้ใช้กำหนดเองเพื่ออ่านฐานข้อมูลผู้ใช้หรือไม่ หรือฉันต้องทำสิ่งนี้ผ่านการแม็พผู้ใช้ต่อผู้ใช้?

คำตอบ:


16

การโพสต์สิ่งนี้เป็นคำตอบเพียงเพราะมันยาวเกินไปสำหรับความคิดเห็นและเพราะมันจะเกี่ยวข้องกับผู้ใช้คนอื่นในไม่ช้า

SQL Server 2014 เพิ่มสิทธิ์ระดับเซิร์ฟเวอร์ใหม่บางอย่างที่จะช่วยในสถานการณ์ประเภทนี้อย่างแน่นอน - พวกเขาได้รับการออกแบบโดยคำนึงถึงการตรวจสอบ แต่ความต้องการประเภทนี้ดูเหมือนจะพอดีกับใบเรียกเก็บเงินเช่นกัน คุณสามารถเพิ่มสองสิทธิ์ต่อไปนี้ในการเข้าสู่ระบบในระดับเซิร์ฟเวอร์:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

ก่อนหน้านี้ฟังดูเหมือนจะอนุญาตให้ล็อกอินเชื่อมต่อกับฐานข้อมูลใด ๆ สิ่งที่ดีเกี่ยวกับสิ่งนี้คือมันจะยอมให้สิ่งนี้แม้สำหรับฐานข้อมูลที่สร้างขึ้นในอนาคต (หากคุณไม่ได้ตั้งค่าการปฏิเสธอย่างชัดเจนซึ่งเป็นวิธีที่คุณสามารถป้องกันฐานข้อมูลผู้ใช้บางอย่างจากการเข้าสู่ระบบที่มีสิทธิ์นี้) หลังอนุญาตให้เข้าสู่ระบบเพื่อดำเนินการอ่านในฐานข้อมูลใด ๆ ที่พวกเขาสามารถเข้าถึง - เพื่อให้พวกเขาสามารถSELECTจากตารางมุมมอง UDF ฯลฯ แต่พวกเขาจะไม่สามารถดำเนินการใด ๆUPDATE(ฉันไม่ได้ทดสอบว่าสิทธิ์นี้เข้าใจเมื่อ กระบวนงานที่เก็บไว้ดำเนินการ DML) เหล่านี้ที่ดีในการทำงานรวมกันถ้าคุณต้องการที่จะให้เข้าสู่ระบบที่เปิดกว้างการเข้าถึงแบบอ่านไปยังเซิร์ฟเวอร์ทั้งหมดหรือจะเป็นเม็ดเล็กที่คุณสามารถให้แบบดั้งเดิมCONNECTสิทธิพิเศษไปยังฐานข้อมูลบางอย่างและSELECT ALL USER SECURABLESเจตจำนงทางขวาเท่านั้นทำงานสำหรับฐานข้อมูลเหล่านั้นที่การเข้าสู่ระบบมีการเข้าถึงอย่างชัดเจน

การเปลี่ยนแปลงด้านความปลอดภัยในปี 2014 มีการจัดทำเป็นเอกสารไว้ที่นี่ - บางส่วน; พวกเขาลืมเกี่ยวกับสิทธิ์ระดับฐานข้อมูลALTER ANY DATABASE EVENT SESSION- แม้ว่ามันจะไม่เกี่ยวข้องที่นี่


ขอบคุณสำหรับคำตอบเพิ่มเติมนี้สำหรับเซิร์ฟเวอร์ที่กำลังมาถึง เนื่องจากการดำเนินการ / ตรวจสอบนี้อยู่ในระดับเซิร์ฟเวอร์ มีข้อคิดเห็นใด ๆ หรือไม่ถ้าระดับความเข้ากันได้ของฐานข้อมูล ดังนั้นถ้า DB CL เป็น 2012 คุณลักษณะ 2014 จะยังใช้งานได้หรือไม่
SnapJag

@SnapJag ระดับความเข้ากันได้ไม่มีผลต่อคุณลักษณะความปลอดภัยส่วนใหญ่เกี่ยวกับวิธีการแยกวิเคราะห์ T-SQL และวิธีที่เครื่องมือเพิ่มประสิทธิภาพสร้างแผนแบบสอบถาม
Aaron Bertrand

@AaronBertrand คุณรู้หรือไม่ว่ามีการอนุญาตที่เราสามารถกำหนดให้กับบทบาทระดับเซิร์ฟเวอร์เพื่ออนุญาตการอัปเดตฐานข้อมูลใด ๆ (sysadmin บทบาทที่แน่นอนสามารถทำได้อย่างแน่นอน แต่เราสามารถทำเพื่อบทบาทเซิร์ฟเวอร์ที่ผู้ใช้กำหนดได้หรือไม่)
MaxiWheat

@ MaxiWheat ไม่ไม่สามารถนึกถึงวิธีที่ไม่สำคัญในการทำเช่นนั้นขอโทษ
Aaron Bertrand

FWIW สิ่งนี้จะไม่ทำงานกับฐานข้อมูล Azure SQL ได้รับการเชื่อมต่อฐานข้อมูลใด ๆ กับ [NameOfUserOrGroup] คลาส 'เซิร์ฟเวอร์' ที่ปลอดภัยที่ไม่รองรับใน SQL Server รุ่นนี้
Dzejms

8

ไม่มีสิทธิ์ระดับ 'อ่านฐานข้อมูลใด ๆ 'ในระดับเซิร์ฟเวอร์และบทบาทระดับเซิร์ฟเวอร์ไม่สามารถรับสิทธิ์ระดับฐานข้อมูลได้

ใช่แล้วคุณจะต้องแมปผู้ใช้กับฐานข้อมูลทีละรายการ หากคุณใช้ Active Directory คุณสามารถสร้างกลุ่ม windows จากนั้นให้กลุ่มนั้นเข้าสู่ระบบ SQL Server จากนั้นใช้ db_datareader ในฐานข้อมูลทั้งหมดสำหรับกลุ่มนั้น (คุณจะต้องสร้างผู้ใช้ในแต่ละฐานข้อมูล)

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