DDL_admin เทียบกับสิทธิ์ db_owner


15

ฉันเข้าร่วมโปรเจ็กต์ที่เกี่ยวข้องกับการลบและ จำกัด สิทธิ์ของผู้ใช้ฐานข้อมูลทั้งหมดในเซิร์ฟเวอร์ฟาร์มของเรา (ช่วงเวลาแห่งความสนุก)

หนึ่งในสิทธิ์ที่ถูก จำกัด ในขณะนี้คือสิทธิ์ db_owner
การอนุญาตนี้กำลังได้รับการตรวจสอบเป็นกรณี ๆ ไป แต่การเปลี่ยนแปลงทั่วไปคือการแทนที่สิทธิ์ db_owner ด้วยสิ่งต่อไปนี้:

ฉันต้องการกำหนดความแตกต่างที่แน่นอนระหว่างสอง (เพื่อแจ้งลูกค้า)
อย่างไรก็ตามเท่าที่ฉันสามารถบอกได้ความแตกต่างระหว่างสองควรเป็น:

  • สิทธิ์ db_accessadmin
  • สิทธิ์ db_backupoperator
  • สิทธิ์ db_securityadmin

ดังนั้นในผลกระทบที่พวกเขาจะสูญเสีย:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

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

คำตอบ:


16

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]

สังเกตได้ว่า . .

  1. db_datareaderจะอนุญาตให้SELECTเข้าถึงตารางทั้งหมด
  2. db_datarwriterจะช่วยให้INSERT, UPDATEและDELETEการเข้าถึงตารางทั้งหมด
  3. db_executorจะอนุญาตให้EXECUTEเข้าถึงวัตถุที่ปฏิบัติการได้ทั้งหมด

นอกจากนี้การมีสิทธิ์ของบทบาท db_ddladmin อาจหมายถึง . .

หมายเหตุ: เนื่องจากคุณมี SQL Server รุ่นต่าง ๆ มากมายตั้งแต่ปี 2005 - 2014 จึงเป็นการดีที่สุดที่จะให้ผู้ใช้กลุ่มเล็ก ๆ ทดสอบสิ่งนี้ในตอนแรก

  • วัตถุที่พวกเขาเป็นเจ้าของในบทบาทนี้จะไม่ถูกครอบครองโดย DBO ดังนั้นคุณอาจต้องจัดการกับปัญหาการเป็นเจ้าของหากมีปัญหาในระดับนี้ ฉันไม่แน่ใจ 100% ว่านี่จะเป็นปัญหา แต่ก็คุ้มค่าที่จะกล่าวถึงในกรณี

    ที่มา: โซ่ความเป็นเจ้าของ

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


นอกจากนี้การไม่มีบทบาทการอนุญาต DBO อาจหมายถึง . .

หมายเหตุ: เนื่องจากคุณมี SQL Server รุ่นต่าง ๆ มากมายตั้งแต่ปี 2005 - 2014 จึงเป็นการดีที่สุดที่จะให้ผู้ใช้กลุ่มเล็ก ๆ ทดสอบสิ่งนี้ในตอนแรก

  • การไม่มีบทบาท DBO อาจป้องกันอินเทอร์เฟซ GUI ผู้ออกแบบ SSMS บางอย่าง(SQL Server เวอร์ชันที่แตกต่างกัน)จากการเติมหรือเปิดโดยไม่มีข้อผิดพลาด(เช่นเมื่อปรับเปลี่ยนตารางหรือคอลัมน์ผ่าน GUI)แม้ว่าจะทำผ่าน T-SQL . ในบางรุ่นของ SQL Server สิ่งนี้อาจแก้ไขได้ด้วยการอนุญาตให้GRANT VIEW DEFINITIONเกิดปัญหาและสามารถเป็นเพียงคำเตือนใน SQL Server บางรุ่นเท่านั้น

    ทรัพยากร

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

    • db_ddladmin บทบาทไม่อนุญาตให้ใช้ฟังก์ชัน "design" ใน SSMS

      "เราพยายามป้องกันไม่ให้ผู้ใช้ / นักพัฒนา dbo ในฐานข้อมูล QA ของพวกเขามากเท่าที่จะทำได้หนึ่งในปัญหานี้คือพวกเขายังคงต้องสามารถสร้างและแก้ไขวัตถุฐานข้อมูลเช่นตารางผู้ใช้ devs จำนวนมากยังใหม่ต่อการ MS SQL และมักจะติดกับ GUI (SSMS) สำหรับงานประเภทนี้ปัญหาเกิดขึ้นเมื่อเราให้ db_ddladmin (ไม่ใช่ dbo) และพวกเขาไม่สามารถแก้ไขตารางหรือคอลัมน์ผ่าน GUI ออกแบบตารางได้อีกต่อไปแทน พวกเขาต้องใช้เวลาเพิ่มเติมเพื่อเรียนรู้คำสั่ง TSQL และไวยากรณ์ของพวกเขา (ซึ่งพวกเขาอาจไม่ต้องการอีกครั้ง) หรือเข้าร่วมทีม DBA ซึ่งต้องใช้เวลาจากกิจกรรมอื่น ๆ ของเรา

      ฉันไม่รู้ว่านี่เป็นข้อผิดพลาดหรือการร้องขอคุณสมบัติ แต่ฉันคิดว่ามันเป็นข้อผิดพลาดเนื่องจากผู้ใช้มีสิทธิ์เพียงพอในการแก้ไขตารางผ่าน TSQL แต่ GUI ให้ข้อความที่ระบุ:

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

      ดูเหมือนว่าการติดตามจะชี้ไปที่การตรวจสอบว่าเป็น is_member ('db_owner') ซึ่งจะห้ามสมาชิกของ db_ddladmin แม้ว่าที่จริงแล้วพวกเขามีสิทธิ์ในการปรับเปลี่ยนวัตถุ สตูดิโอการจัดการเซิร์ฟเวอร์ Microsoft SQL "


      โพสต์โดย Agent DBA เมื่อ 1/25/2010 เวลา 7:06 น

      ฉันมีปัญหาที่คล้ายกันและสามารถแก้ไขได้โดยดำเนินการตามสิทธิ์ต่อไปนี้

      GRANT view definition on schema:: <schemaname> to <username>

ข้อควรพิจารณาอื่น ๆ

เนื่องจากคุณระบุว่าสิ่งนี้กำลังได้รับการตรวจสอบเป็นกรณี ๆ ไป

หนึ่งในสิทธิ์ที่ถูก จำกัด ในขณะนี้คือสิทธิ์ 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 PROCEDUREDENY 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

8

การใช้สคริปต์ SQL เพื่อแสดงรายการการอนุญาตทั้งหมดฉันไปและสร้างผู้ใช้สำหรับแต่ละกรณี

EXECUTE AS USER = 'test_user'
SELECT 
    permission_name 
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;

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

แก้ไข

Confers ความสามารถในการเปลี่ยนคุณสมบัติยกเว้นการเป็นเจ้าของความปลอดภัยที่เฉพาะเจาะจง เมื่อได้รับในขอบเขต ALTER ยังมอบความสามารถในการแก้ไขสร้างหรือวางสิ่งที่ปลอดภัยที่อยู่ภายในขอบเขตนั้น ตัวอย่างเช่นสิทธิ์ ALTER บนสคีมารวมถึงความสามารถในการสร้างแก้ไขและวางออบเจ็กต์จากสคีมา

แก้ไขแอปพลิเคชันใด ๆ เปลี่ยนแอพ
ฐานข้อมูลตรวจสอบ
แก้ไขบทบาท
ใด ๆ เปลี่ยนผู้ใช้คนใดก็ได้

กำหนดความสามารถในการสร้าง ALTER หรือ DROP แต่ละอินสแตนซ์ของฐานข้อมูลที่ปลอดภัย ตัวอย่างเช่น ALTER ANY SCHEMA สร้างความสามารถในการสร้างแก้ไขหรือลดสคีมาใด ๆ ในฐานข้อมูล

บทบาทของแอปพลิเคชันคือฐานข้อมูลหลักที่เปิดใช้งานแอปพลิเคชันให้ทำงานด้วยสิทธิ์ที่เหมือนผู้ใช้

การตรวจสอบอินสแตนซ์ของ SQL Server หรือฐานข้อมูล SQL Server เกี่ยวข้องกับการติดตามและบันทึกเหตุการณ์ที่เกิดขึ้นบนระบบ วัตถุข้อกำหนดการตรวจสอบระดับฐานข้อมูลเป็นของการตรวจสอบ คุณสามารถสร้างหนึ่งข้อกำหนดการตรวจสอบฐานข้อมูลต่อฐานข้อมูล SQL Server ต่อการตรวจสอบ

บทบาทฐานข้อมูลถูกใช้เพื่อจัดการสิทธิ์ในฐานข้อมูลของคุณได้อย่างง่ายดาย SQL Server มีบทบาทหลายอย่างซึ่งเป็นหลักการรักษาความปลอดภัยที่จัดกลุ่มหลักการอื่น ๆ พวกเขาเป็นเหมือนกลุ่มในระบบปฏิบัติการ Microsoft Windows บทบาทระดับฐานข้อมูลกว้างทั่วทั้งฐานข้อมูลในขอบเขตการอนุญาต

รับรองความถูกต้อง
พบใน MSDN

AUTHENTICATE & AUTHENTICATE SERVER สิทธิ์จะใช้เฉพาะเมื่อใช้ EXECUTE AS ในสถานการณ์ฐานข้อมูลข้ามและการเข้าถึงเซิร์ฟเวอร์ (ตามลำดับ)

ฐานข้อมูลฐาน
ข้อมูลแบ็คอัพ

การเชื่อมต่อแบบจำลอง

ใช้สำหรับการอนุญาตให้จำลองแบบฐานข้อมูล

ควบคุม

Confers ความสามารถในการเป็นเจ้าของเหมือนในผู้รับสิทธิ์ ผู้รับสิทธิ์มีสิทธิ์ทั้งหมดที่กำหนดไว้อย่างปลอดภัย ตัวการที่ได้รับการควบคุมก็สามารถให้สิทธิ์ในการรักษาความปลอดภัยได้

สร้างบทบาท

ให้ผู้รับความสามารถในการสร้างฐานข้อมูลที่ปลอดภัย

SHOWPLAN

สิทธิ์ Showplan จะใช้สำหรับตัวเลือกคำสั่ง Showplan ตลาดหลักทรัพย์ต่าง ๆ เมื่อพวกเขาจะใช้กับแบตช์

บอกรับเป็นสมาชิกแบบสอบถาม

เอกสารเกี่ยวกับการแจ้งเตือนแบบสอบถาม

สร้างขึ้นตามโครงสร้างพื้นฐาน Service Broker การแจ้งเตือนแบบสอบถามอนุญาตให้แอปพลิเคชันได้รับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงข้อมูล คุณลักษณะนี้มีประโยชน์อย่างยิ่งสำหรับแอปพลิเคชันที่ให้แคชข้อมูลจากฐานข้อมูลเช่นเว็บแอปพลิเคชันและจำเป็นต้องได้รับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงข้อมูลต้นฉบับ

ใช้เวลาเป็นเจ้าของ

ช่วยให้ผู้รับสิทธิ์เป็นเจ้าของความปลอดภัยที่ได้รับ

ดูฐานข้อมูลรัฐ

ใช้ในการดูชมการบริหารจัดการแบบไดนามิกและฟังก์ชั่น (Transact SQL)

ดูคำจำกัดความ

เอกสารเกี่ยวกับการอนุญาตการกำหนดมุมมอง

สิทธิ์การกำหนดมุมมองช่วยให้ผู้ใช้เห็นข้อมูลเมตาของความปลอดภัยที่ได้รับอนุญาต อย่างไรก็ตามการอนุญาต VIEW DEFINITION ไม่ได้อนุญาตให้เข้าถึงตัวเองได้อย่างปลอดภัย ตัวอย่างเช่นผู้ใช้ที่ได้รับอนุญาตให้ดูเฉพาะการกำหนดสิทธิ์บนตารางสามารถดูข้อมูลเมตาที่เกี่ยวข้องกับตารางในมุมมองแคตตาล็อก sys.objects อย่างไรก็ตามหากไม่มีสิทธิ์เพิ่มเติมเช่น SELECT หรือ CONTROL ผู้ใช้จะไม่สามารถอ่านข้อมูลจากตารางได้

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