สิทธิ์ของ SQL Server ในการสร้างเรียกคืนลบฐานข้อมูลบางอย่างเท่านั้น


17

บน MS SQL Server 2008 R2 ฉันต้องมีผู้ใช้ที่สามารถสร้าง, เรียกคืน, DBCC CHECKDB แล้วปล่อยฐานข้อมูล แต่เขาจะต้องไม่สามารถเข้าถึงหรือลบฐานข้อมูลที่ระบุบนเซิร์ฟเวอร์ (เหตุผลด้านความปลอดภัย) เป็นไปได้หรือไม่


คุณสามารถขอคำแนะนำได้ที่นี่: toadworld.com/platforms/sql-server/w/wiki/…
dezso

คำตอบ:


27

ใช่มันเป็นไปได้ผ่านการอนุญาตสองสามอย่าง

ครั้งแรก - เพื่อสร้างฐานข้อมูล - Create Any Databaseคุณจะต้องให้สิทธิ์ในระดับเซิร์ฟเวอร์ การอนุญาตนี้ทำในสิ่งที่ดูเหมือน - พลังในการสร้างฐานข้อมูล หมายเหตุนี่ไม่ได้ให้บทบาทเซิร์ฟเวอร์คงที่ของ dbcreator กับการเข้าสู่ระบบเนื่องจากบทบาทเซิร์ฟเวอร์คงที่นั้นให้สิทธิ์ในการแก้ไข / ลบในฐานข้อมูลใด ๆ Create Any Databaseอนุญาตให้ล็อกอินมีอำนาจเหนือฐานข้อมูลที่พวกเขาเป็นเจ้าของเท่านั้น สิ่งนี้จะให้ความสามารถในการกู้คืน

(ดังนั้นโดยทำ "สร้างฐานข้อมูลใด ๆ " เท่านั้น - คุณกำลังให้ความสามารถในการสร้างฐานข้อมูลใหม่ แต่หลีกเลี่ยงความสามารถในการปล่อยหรือแก้ไขฐานข้อมูลใด ๆที่คุณจะได้รับโดยใช้บทบาทเซิร์ฟเวอร์คงที่ dbcreator)

หากต้องการให้สิทธิ์ "สร้างฐานข้อมูลใด ๆ " นี้ -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

สำหรับความสามารถในการรันDBCC CHECKDBและปล่อยฐานข้อมูล - บทบาทฐานข้อมูลคงที่ db_owner นั้นเพียงพอแล้ว สิ่งนี้ให้ทุกสิ่งที่คุณต้องการ หมายเหตุ:db_ownerคุณกำลังจะให้สิทธิ์ผู้ใช้นี้ความสามารถในการเลือกลบตัดปรับปรุงและแทรกด้วย ฉันชอบคิดว่านี่เป็นsysadminฐานข้อมูล

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

เมื่อต้องการทำสิ่งนี้คุณต้องแม็พการล็อกอินกับผู้ใช้ฐานข้อมูลก่อน:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

จากนั้นเพิ่มผู้ใช้นั้นเข้ากับdb_ownerบทบาท (ทำงานใน SQL Server 2012 และบน):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

สำหรับ SQL Server 2008 คุณจะต้องใช้กระบวนการจัดเก็บระบบเพื่อเพิ่มสมาชิกบทบาทเป็นผู้แสดงความคิดเห็นด้านล่างชี้ให้เห็นอย่างถูกต้อง:

EXEC sp_addrolemember 'db_owner', 'frank';

คุณยังสามารถทำสิ่งนี้ผ่าน GUI ข้อมูลการเข้าสู่ระบบที่คุณทำผ่านโฟลเดอร์ความปลอดภัยใน SSMS ที่ระดับอินสแตนซ์: คลิกขวาที่ล็อกอิน -> คุณสมบัติ -> ความปลอดภัย สำหรับระดับฐานข้อมูลคุณสามารถทำได้ผ่านโฟลเดอร์ความปลอดภัยที่ระดับฐานข้อมูล: คลิกขวาและเลือกผู้ใช้ใหม่ -> เลือกชื่อผู้ใช้ที่คุณต้องการจากรายการล็อกอินเซิร์ฟเวอร์ / ชื่อผู้ใช้ฐานข้อมูล -> ไปที่ แท็บความเป็นสมาชิกเพื่อเลือกบทบาทความเป็นสมาชิก

ระบบความช่วยเหลือของ SQL Server หนังสือออนไลน์เป็นทรัพยากรที่ยอดเยี่ยมสำหรับคำถามการอนุญาตส่วนใหญ่เช่นกัน - หากคุณพิจารณาว่าคุณต้องกำหนดสิทธิ์อื่น ๆ เพียงทำการค้นหาคำสั่ง T-SQL ที่คุณต้องการให้สิทธิ์และโดยปกติจะมีส่วนสิทธิ์สำหรับคำสั่งนั้นในบทความเพื่อให้คุณรู้ว่าต้องใช้การอนุญาตใดในการดำเนินการนี้ คุณสามารถดูบทความสำหรับDBCC CHECKDBสำหรับตัวอย่าง - ประมาณ 7/8 ของวิธีลงบทความเป็นส่วนสิทธิ์


3
ฉันแค่อยากจะเพิ่มที่ใช้ALTER ROLE [db_owner] ADD MEMBER [frank]งานได้เฉพาะจาก SQL Server 2012 ถ้าคุณอยู่ใน SQL Server 2008 หนึ่งควรไปกับ SP: EXEC sp_addrolemember 'db_owner', 'frank';(อ้างอิงที่นี่และที่นี่ )
superjos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.