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