Quyền DDL_admin so với db_owner


15

Tôi đang tiếp quản một dự án liên quan đến việc loại bỏ và giới hạn quyền của tất cả người dùng cơ sở dữ liệu trên toàn bộ máy chủ của chúng tôi. (thời gian vui vẻ)

Một trong những quyền hiện đang bị giới hạn là quyền db_owner.
Quyền này đang được xem xét trên cơ sở từng trường hợp cụ thể, nhưng một thay đổi phổ biến là thay thế các quyền db_owner bằng các điều sau:

Tôi muốn xác định sự khác biệt chính xác giữa hai (để thông báo cho khách hàng).
Tuy nhiên, theo như tôi có thể nói, sự khác biệt giữa hai nên là:

  • quyền db_accessadmin
  • quyền db_backupoperator
  • quyền db_securityadmin

Vì vậy, trên thực tế họ sẽ thua:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

Có bất cứ điều gì khác mà người dùng sẽ mất khi db_owner được thay thế bởi bốn vai trò ở trên không?
Điều này thực sự phục vụ nhiều mục đích bảo mật khôn ngoan?

Câu trả lời:


16

db_ddladmin vs db_owner

Từ những gì tôi có thể nói từ những gì tôi đã kiểm tra và đọc lên, phần lớn danh sách của bạn có vẻ chính xác ngoại trừ db_ddladminDOES cho phép bạn CREATE SCHEMA. Tôi đã xác nhận rằng các quyền bảo mật khác mà bạn liệt kê thực sự bị từ chối.

Bị từ chối chỉ với DDLADMIN:

[ALTER ANY USER]

[BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]

[ALTER ANY APPLICATION ROLE], [ALTER ANY ROLE]

[DROP DATABASE]

Lưu ý rằng. . .

  1. db_datareadersẽ cho phép SELECTtruy cập vào tất cả các bảng
  2. db_datarwritersẽ cho phép INSERT, UPDATEDELETEtruy cập vào tất cả các bảng
  3. db_executorsẽ cho phép EXECUTEtruy cập vào tất cả các đối tượng thực thi

Ngoài ra, có quyền truy cập vai trò db_ddladmin có thể có nghĩa. . .

Lưu ý: Vì bạn có rất nhiều phiên bản SQL Server khác nhau từ năm 2005 - 2014, tốt nhất nên có một nhóm người dùng nhỏ kiểm tra điều này ban đầu để xem ai hét lên để giải quyết bất kỳ kink nào, v.v.

  • Các đối tượng mà họ sở hữu với vai trò này sẽ không được DBO sở hữu, do đó bạn có thể phải giải quyết các vấn đề về quyền sở hữu nếu có vấn đề gì đó ở cấp độ này. Tôi không chắc chắn 100% rằng đây sẽ là một vấn đề nhưng nó đáng được đề cập chỉ trong trường hợp.

    Nguồn: Chuỗi sở hữu

  • Với vai trò này (có thể thay đổi tùy theo phiên bản SQL Server), họ có thể thêm các nguyên tắc bảo mật SQL được xác định trong DB hiện tại vào các đối tượng mà chúng sở hữu, không phải tất cả các đối tượng (chúng không sở hữu) cũng không thêm máy chủ mới -level được xác định chính cho cấp DB.


Ngoài ra, không có quyền vai trò DBO có thể có nghĩa. . .

Lưu ý: Vì bạn có rất nhiều phiên bản SQL Server khác nhau từ năm 2005 - 2014, tốt nhất nên có một nhóm người dùng nhỏ kiểm tra điều này ban đầu để xem ai hét lên để giải quyết bất kỳ kink nào, v.v.

  • Không có vai trò DBO có thể ngăn các giao diện GUI của nhà thiết kế SSMS nhất định (phiên bản SQL Server thay đổi) không bị lỗi hoặc mở mà không có lỗi (ví dụ: khi sửa đổi bảng hoặc cột thông qua GUI) ngay cả khi thực hiện thông qua T-SQL hoạt động và có quyền . Trong một số phiên bản của SQL Server, điều này có thể được giải quyết bằng cách cho phép GRANT VIEW DEFINITIONđây là một vấn đề và nó cũng chỉ có thể là một cảnh báo trên một số phiên bản nhất định của SQL Server.

    Tài nguyên

    • Bạn chưa đăng nhập với tư cách là chủ sở hữu cơ sở dữ liệu hoặc là người dùng là thành viên của vai trò db_owner. Bạn sẽ không thể lưu các thay đổi vào các bảng mà bạn không sở hữu.

    • Vai trò db_ddladmin không cho phép sử dụng các hàm "thiết kế" trong SSMS

      "Chúng tôi cố gắng ngăn không cho người dùng / nhà phát triển dbo trong cơ sở dữ liệu QA của họ hết mức có thể. Một trong những vấn đề với điều này là họ vẫn cần có khả năng tạo và sửa đổi các đối tượng cơ sở dữ liệu như bảng người dùng. MS SQL và do đó có xu hướng gắn bó với GUI (SSMS) cho loại công việc này. Vấn đề phát sinh khi chúng tôi cấp cho họ db_ddladmin (không phải dbo) và họ không còn có thể sửa đổi các bảng hoặc cột thông qua GUI của trình thiết kế bảng. Thay vào đó, họ phải dành thêm thời gian để tìm hiểu các lệnh TSQL và cú pháp của họ (mà họ có thể không bao giờ cần nữa) hoặc tham gia vào nhóm DBA làm mất thời gian khỏi các hoạt động khác của chúng tôi.

      Tôi không biết đây là lỗi hay yêu cầu tính năng nhưng tôi coi đó là lỗi vì người dùng có đủ quyền để thay đổi bảng thông qua TSQL nhưng GUI cung cấp cho họ thông báo:

      " Bạn chưa đăng nhập với tư cách là chủ sở hữu cơ sở dữ liệu hoặc quản trị viên hệ thống. Bạn có thể không lưu các thay đổi vào các bảng mà bạn không sở hữu." VÀ "Bảng [schema].[table]được đặt thành chỉ đọc, người dùng không có đủ quyền trên bảng này. "

      Một dấu vết dường như chỉ ra séc là is_member ('db_owner') sẽ loại trừ các thành viên của db_ddladmin ngay cả khi thực tế họ có quyền sửa đổi đối tượng. Studio quản lý máy chủ Microsoft SQL "


      Được đăng bởi Đại lý DBA vào ngày 1/25 lúc 7:06 sáng

      Tôi đã có một vấn đề tương tự và quản lý để giải quyết nó bằng cách thực hiện các khoản trợ cấp sau

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

Những ý kiến ​​khác

Vì bạn nói rằng điều này đang được xem xét trên cơ sở từng trường hợp

Một trong những quyền hiện đang bị giới hạn là quyền db_owner.

Quyền này đang được xem xét trên cơ sở từng trường hợp cụ thể, nhưng một thay đổi phổ biến là thay thế các quyền db_owner bằng các điều sau:

  • db_datarhead
  • db_datawriter
  • db_ddladmin
  • db_executor

Bạn đã xem xét việc tạo các vai trò tùy chỉnh bổ sung cho nhiều quyền truy cập cấp DB "đối tượng" hơn mà mỗi người cần thay vì cấp cho họ db_ddladminvai trò vì điều đó có thể sẽ cung cấp cho họ nhiều hơn so với thực tế đối với các đối tượng cấp DB.

Tôi thường cung cấp chính xác những gì cần thiết và không có gì hơn để họ thực hiện công việc của mình và nếu có nhu cầu "thông thường" hoặc "tiêu chuẩn" cho đối tượng cấp DB truy cập vào tất cả các đối tượng trong DB, tôi tạo ra một loại vai trò DB tùy chỉnh giống như db_executornhưng xem ví dụ dưới đây của tôi. Bằng cách này, bạn có thể cấp cho mọi người những gì họ thực sự cần cho TẤT CẢ đối tượng DB trong một DB cụ thể nếu bạn không nhận được mức đối tượng rõ ràng trong DB của mình để bảo mật cho họ.

----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

Tôi cũng muốn chia sẻ vai trò db_DDLAdmin_Restriction mà bạn có thể muốn xem xét để tạo cách khác với việc rõ ràng DENYđể hạn chế db_ddladminquyền truy cập để bạn ít nhất có thể tạo điều này trên DB nơi bạn cấp cho họ vai trò này và đặt rõ ràng DENYcho các loại đối tượng thực tế , v.v. bạn không muốn họ có quyền truy cập.

Ví dụ, nếu bạn biết rằng họ chắc chắn sẽ tạo thủ tục lưu trữ và chức năng, bạn có thể loại trừ 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

8

Sử dụng SQL Script để liệt kê tất cả các quyền, tôi đã tạo và tạo người dùng cho từng trường hợp.

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

Sau đó, tôi đã so sánh các kết quả và đến danh sách sau đây, với tài liệu từ chủ yếu là msDN (bất kỳ trích dẫn nào không được tham chiếu cụ thể là từ liên kết msDN).
Dưới đây là một số tài liệu tôi đã sử dụng để thông báo cho những người sẽ mất quyền truy cập dbo chính xác những gì họ đã mất.

THAY ĐỔI

Đảm bảo khả năng thay đổi các thuộc tính, ngoại trừ quyền sở hữu, của một bảo mật cụ thể. Khi được cấp trên một phạm vi, ALTER cũng cho phép khả năng thay đổi, tạo hoặc loại bỏ bất kỳ bảo mật nào có trong phạm vi đó. Ví dụ, quyền ALTER trên lược đồ bao gồm khả năng tạo, thay đổi và thả các đối tượng khỏi lược đồ.

THAY ĐỔI BẤT K ROL VAI TRÒ ỨNG DỤNG
NÀO BẤT K A KIỂM TOÁN
NÀO ĐỂ KIẾM ĐƯỢC VẤN ĐỀ
THAY ĐỔI

Cung cấp khả năng TẠO, THAY ĐỔI hoặc DROP các phiên bản riêng lẻ của Cơ sở dữ liệu Bảo mật. Ví dụ, ALTER ANY SCHema cung cấp khả năng tạo, thay đổi hoặc xóa bất kỳ lược đồ nào trong cơ sở dữ liệu.

Vai trò ứng dụng là các nguyên tắc cơ sở dữ liệu cho phép ứng dụng chạy với các quyền giống như người dùng của chính nó.

Kiểm tra phiên bản của SQL Server hoặc cơ sở dữ liệu SQL Server liên quan đến việc theo dõi và ghi nhật ký các sự kiện xảy ra trên hệ thống. Đối tượng Đặc tả kiểm toán mức cơ sở dữ liệu thuộc về kiểm toán. Bạn có thể tạo một đặc tả kiểm toán cơ sở dữ liệu cho mỗi cơ sở dữ liệu SQL Server cho mỗi lần kiểm tra.

Vai trò cơ sở dữ liệu được sử dụng để dễ dàng quản lý các quyền trong cơ sở dữ liệu của bạn, SQL Server cung cấp một số vai trò là các nguyên tắc bảo mật nhóm các hiệu trưởng khác. Họ giống như các nhóm trong hệ điều hành Microsoft Windows. Các vai trò cấp cơ sở dữ liệu là toàn bộ cơ sở dữ liệu trong phạm vi quyền của chúng.

AUTHENTICATE
Tìm thấy trong msd.

Quyền AUTHENTICATE & AUTHENTICATE SERVER chỉ được sử dụng khi sử dụng EXECUTE AS trong các tình huống cơ sở dữ liệu chéo và truy cập máy chủ (tương ứng).

DATABASE BACKUP
BACKUP LOG

ĐẠI DIỆN KẾT NỐI

Được sử dụng cho quyền sao chép cơ sở dữ liệu .

ĐIỀU KHIỂN

Cung cấp các khả năng giống như quyền sở hữu đối với người được cấp. Người được cấp có hiệu quả tất cả các quyền được xác định trên bảo mật. Hiệu trưởng đã được cấp KIỂM SOÁT cũng có thể cấp quyền trên bảo mật.

TẠO VAI TRÒ

Trao cho người được cấp khả năng tạo Cơ sở dữ liệu có thể bảo mật.

SHOWPLAN

Quyền Showplan được sử dụng cho các tùy chọn câu lệnh Showplan SET khác nhau khi chúng được sử dụng với các lô Transact-SQL .

ĐĂNG KÝ THÔNG BÁO CÂU HỎI

Tài liệu về thông báo truy vấn.

Được xây dựng dựa trên cơ sở hạ tầng của Nhà môi giới dịch vụ, thông báo truy vấn cho phép các ứng dụng được thông báo khi dữ liệu đã thay đổi. Tính năng này đặc biệt hữu ích cho các ứng dụng cung cấp bộ đệm thông tin từ cơ sở dữ liệu, chẳng hạn như ứng dụng Web và cần được thông báo khi dữ liệu nguồn được thay đổi.

LẤY QUYỀN SỞ HỮU

Cho phép người được cấp quyền sở hữu bảo đảm mà nó được cấp.

XEM NHÀ NƯỚC

Được sử dụng để xem các chức năng và khung nhìn quản lý động (Transact-SQL) .

XEM ĐỊNH NGH DEA

Tài liệu về quyền xem định nghĩa.

Quyền VIEW DEFINATION cho phép người dùng xem siêu dữ liệu của bảo mật mà quyền được cấp. Tuy nhiên, quyền VIEW DEFINATION không trao quyền truy cập vào chính nó. Ví dụ: người dùng chỉ được cấp quyền XEM QUAN TRỌNG trên bảng có thể thấy siêu dữ liệu liên quan đến bảng trong chế độ xem danh mục sys.objects. Tuy nhiên, không có các quyền bổ sung như CHỌN hoặc KIỂM SOÁT, người dùng không thể đọc dữ liệu từ bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.