Trên MS SQL Server 2008 R2, tôi cần phải có người dùng có thể tạo, khôi phục, DBCC CHECKDB và sau đó loại bỏ cơ sở dữ liệu. Nhưng anh ta không thể truy cập hoặc xóa cơ sở dữ liệu được chỉ định trên máy chủ (lý do bảo mật). Là thiết lập này có thể?
Trên MS SQL Server 2008 R2, tôi cần phải có người dùng có thể tạo, khôi phục, DBCC CHECKDB và sau đó loại bỏ cơ sở dữ liệu. Nhưng anh ta không thể truy cập hoặc xóa cơ sở dữ liệu được chỉ định trên máy chủ (lý do bảo mật). Là thiết lập này có thể?
Câu trả lời:
Có, nó có thể thông qua một vài quyền.
Đầu tiên - để tạo cơ sở dữ liệu - Bạn sẽ cần cấp quyền cấp máy chủ Create Any Database
. Sự cho phép này thực hiện đúng như những gì nó nghe - sức mạnh để tạo ra một cơ sở dữ liệu. Lưu ý rằng điều này không cung cấp vai trò máy chủ cố định của dbcreator cho đăng nhập, vì vai trò máy chủ cố định đó cung cấp quyền thay đổi / xóa trên bất kỳ cơ sở dữ liệu nào. Create Any Database
chỉ cho phép đăng nhập để có quyền đó đối với cơ sở dữ liệu mà họ sở hữu. Điều này cũng sẽ cung cấp khả năng khôi phục.
(Vì vậy, bằng cách làm "Create Bất kỳ cơ sở dữ liệu" CHỈ - bạn đang đưa ra khả năng để tạo ra một cơ sở dữ liệu mới, nhưng tránh khả năng Drop hoặc Alter BẤT CỨ cơ sở dữ liệu mà bạn muốn có được bằng cách sử dụng vai trò dbcreator máy chủ cố định)
Để cấp quyền "Tạo bất kỳ cơ sở dữ liệu" này -
use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO
Đối với khả năng chạy DBCC CHECKDB
và bỏ cơ sở dữ liệu - vai trò cơ sở dữ liệu cố định db_owner là đủ. Điều này cấp tất cả những gì bạn đang yêu cầu. Xin lưu ý: Bạn cũng cấp cho người dùng này khả năng chọn, xóa, cắt, cập nhật và chèn với db_owner
. Tôi thích nghĩ về điều này như sysadmin
trong một cơ sở dữ liệu.
Bạn sẽ chỉ áp dụng quyền này cho cơ sở dữ liệu mà bạn dự định có khả năng này. Điều này sẽ cho phép bạn kiểm soát cơ sở dữ liệu nào mà người dùng có thể bỏ, khôi phục hoặc checkdb. Bất kỳ cơ sở dữ liệu nào mà bạn chưa cấp cho người dùng các quyền này sẽ được an toàn khỏi người dùng này thực hiện các hành động này trên
Để làm điều này, trước tiên bạn sẽ ánh xạ thông tin đăng nhập đến người dùng cơ sở dữ liệu:
USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName]
GO
Và sau đó thêm người dùng đó vào db_owner
vai trò (Hoạt động trong SQL Server 2012 trở đi):
ALTER ROLE [db_owner] ADD MEMBER [frank]
GO
Đối với SQL Server 2008, bạn sẽ phải sử dụng quy trình được lưu trữ của hệ thống để thêm một thành viên vai trò như một người bình luận bên dưới chỉ ra đúng:
EXEC sp_addrolemember 'db_owner', 'frank';
Bạn cũng có thể làm tất cả điều này thông qua GUI. Thông tin đăng nhập bạn sẽ thực hiện thông qua thư mục bảo mật trong SSMS ở cấp thể hiện: Nhấp chuột phải vào thông tin đăng nhập -> Thuộc tính -> Bảo mật. Đối với cấp độ cơ sở dữ liệu, bạn sẽ thực hiện thông qua thư mục bảo mật ở cấp cơ sở dữ liệu: nhấp chuột phải và chọn người dùng mới -> chọn thông tin đăng nhập bạn muốn cho người dùng từ danh sách đăng nhập máy chủ của bạn / đặt tên cho người dùng cơ sở dữ liệu -> đi đến tab thành viên để chọn thành viên vai trò.
Hệ thống trợ giúp của SQL Server, Books Online, là một tài nguyên tuyệt vời cho hầu hết các câu hỏi về quyền - nếu bạn xác định bạn cần chỉ định các quyền khác. Chỉ cần thực hiện tìm kiếm lệnh T-SQL mà bạn muốn cấp quyền và thường có phần Quyền cho lệnh đó trong bài viết cho bạn biết những quyền nào được yêu cầu để thực hiện hành động này. Bạn có thể xem bài viết cho DBCC CHECKDB để biết ví dụ - khoảng 7/8 đường xuống bài viết là phần quyền.
ALTER ROLE [db_owner] ADD MEMBER [frank]
chỉ hoạt động từ SQL Server 2012. Nếu bạn đang sử dụng SQL Server 2008, bạn nên sử dụng SP: EXEC sp_addrolemember 'db_owner', 'frank';
(Tham khảo tại đây và tại đây )