db_ddladmin กับ db_owner
จากสิ่งที่ผมสามารถบอกได้จากสิ่งที่ฉันผ่านการทดสอบและอ่านข้อมูลเกี่ยวกับส่วนใหญ่รายการของคุณมีลักษณะที่ถูกต้องยกเว้นไม่ช่วยให้คุณสามารถdb_ddladmin
CREATE SCHEMA
ฉันยืนยันว่าสิทธิ์ด้านความปลอดภัยอื่น ๆ ที่คุณระบุไว้ถูกปฏิเสธอย่างแน่นอน
ถูกปฏิเสธด้วย DDLADMIN เท่านั้น:
[ALTER ANY USER]
[BACKUP DATABASE]
, [BACKUP LOG]
,[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
, [ALTER ANY ROLE]
[DROP DATABASE]
สังเกตได้ว่า . .
db_datareader
จะอนุญาตให้SELECT
เข้าถึงตารางทั้งหมด
db_datarwriter
จะช่วยให้INSERT
, UPDATE
และDELETE
การเข้าถึงตารางทั้งหมด
db_executor
จะอนุญาตให้EXECUTE
เข้าถึงวัตถุที่ปฏิบัติการได้ทั้งหมด
นอกจากนี้การมีสิทธิ์ของบทบาท db_ddladmin อาจหมายถึง . .
หมายเหตุ: เนื่องจากคุณมี SQL Server รุ่นต่าง ๆ มากมายตั้งแต่ปี 2005 - 2014 จึงเป็นการดีที่สุดที่จะให้ผู้ใช้กลุ่มเล็ก ๆ ทดสอบสิ่งนี้ในตอนแรก
วัตถุที่พวกเขาเป็นเจ้าของในบทบาทนี้จะไม่ถูกครอบครองโดย DBO ดังนั้นคุณอาจต้องจัดการกับปัญหาการเป็นเจ้าของหากมีปัญหาในระดับนี้ ฉันไม่แน่ใจ 100% ว่านี่จะเป็นปัญหา แต่ก็คุ้มค่าที่จะกล่าวถึงในกรณี
ที่มา: โซ่ความเป็นเจ้าของ
ด้วยบทบาทนี้(อาจแตกต่างกันไปขึ้นอยู่กับรุ่นของ SQL Server)พวกเขาอาจจะสามารถเพิ่มหลักการความปลอดภัยของ SQL ที่กำหนดไว้ในฐานข้อมูลปัจจุบันไปยังวัตถุที่พวกเขาเป็นเจ้าของยังคงไม่ใช่วัตถุทั้งหมด(คนที่พวกเขาไม่ได้เป็นเจ้าของ)หรือเพิ่มเซิร์ฟเวอร์ใหม่ ระดับหลักที่กำหนดให้กับระดับฐานข้อมูล
นอกจากนี้การไม่มีบทบาทการอนุญาต DBO อาจหมายถึง . .
หมายเหตุ: เนื่องจากคุณมี SQL Server รุ่นต่าง ๆ มากมายตั้งแต่ปี 2005 - 2014 จึงเป็นการดีที่สุดที่จะให้ผู้ใช้กลุ่มเล็ก ๆ ทดสอบสิ่งนี้ในตอนแรก
ข้อควรพิจารณาอื่น ๆ
เนื่องจากคุณระบุว่าสิ่งนี้กำลังได้รับการตรวจสอบเป็นกรณี ๆ ไป
หนึ่งในสิทธิ์ที่ถูก จำกัด ในขณะนี้คือสิทธิ์ db_owner
การอนุญาตนี้กำลังได้รับการตรวจสอบเป็นกรณี ๆ ไป แต่การเปลี่ยนแปลงทั่วไปคือการแทนที่สิทธิ์ db_owner ด้วยสิ่งต่อไปนี้:
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
คุณได้พิจารณาการสร้างบทบาทที่กำหนดเองเพิ่มเติมสำหรับการเข้าถึงระดับฐานข้อมูล "วัตถุทั้งหมด" ที่แต่ละคนต้องการมากกว่าให้พวกเขามีdb_ddladmin
บทบาทตามที่อาจให้พวกเขามากกว่าที่พวกเขาต้องการวัตถุระดับฐานข้อมูลเช่นกัน
ฉันมักจะให้สิ่งที่ต้องการอย่างแน่นอนและไม่มีอะไรเพิ่มเติมสำหรับพวกเขาที่จะทำงานของพวกเขาและหากมีความต้องการ "ปกติ" หรือ "มาตรฐาน" สำหรับการเข้าถึงวัตถุระดับ DB เพื่อเข้าถึงวัตถุทั้งหมดในฐานข้อมูลฉันสร้างบทบาท DB แบบกำหนดเองเช่นdb_executor
แต่ดูตัวอย่างด้านล่างของฉัน วิธีนี้คุณสามารถให้สิทธิ์บุคคลในสิ่งที่พวกเขาต้องการให้กับวัตถุ DB ทั้งหมดในฐานข้อมูลเฉพาะหากคุณไม่ได้รับระดับวัตถุอย่างชัดเจนในฐานข้อมูลของคุณเพื่อความปลอดภัยของพวกเขา
----Custom Database Roles
/* CREATE A NEW ROLE -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute
/* CREATE A NEW ROLE -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter
/* CREATE A NEW ROLE -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View
/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO
/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema
ฉันยังต้องการแบ่งปันบทบาท db_DDLAdmin_Restriction คุณอาจต้องการพิจารณาสร้างเป็นอย่างอื่นอย่างชัดเจนDENY
เพื่อ จำกัด สิ่งที่db_ddladmin
ให้การเข้าถึงอย่างน้อยที่สุดคุณจึงสามารถสร้างสิ่งนี้ได้บน DB ที่คุณให้บทบาทนี้กับพวกเขาและตั้งค่าDENY
ชนิดวัตถุจริงให้ชัดเจนฯลฯ คุณไม่ต้องการให้พวกเขาเข้าถึง
ตัวอย่างเช่นถ้าคุณรู้ว่าพวกเขาจะมั่นเหมาะจะสร้างวิธีการจัดเก็บและฟังก์ชั่นที่คุณสามารถยกเว้นDENY CREATE FUNCTION
, ,DENY CREATE PROCEDURE
DENY ALTER ANY SCHEMA
---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY CHECKPOINT TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE TO db_DDLAdmin_Restriction
DENY CREATE QUEUE TO db_DDLAdmin_Restriction
DENY CREATE RULE TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM TO db_DDLAdmin_Restriction
DENY CREATE TABLE TO db_DDLAdmin_Restriction
DENY CREATE TYPE TO db_DDLAdmin_Restriction
DENY CREATE VIEW TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_DDLAdmin_Restriction
DENY REFERENCES TO db_DDLAdmin_Restriction
GO