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_ddladmin
DOES 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. . .
db_datareader
sẽ cho phép SELECT
truy cập vào tất cả các bảng
db_datarwriter
sẽ cho phép INSERT
, UPDATE
và DELETE
truy cập vào tất cả các bảng
db_executor
sẽ cho phép EXECUTE
truy 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_ddladmin
vai 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_executor
như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_ddladmin
quyề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 DENY
cho 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