Làm cách nào để tạo vai trò máy chủ chỉ đọc trên SQL Server 2012?


15

Tôi đang cấp quyền "Xem bất kỳ cơ sở dữ liệu nào" khi tạo vai trò máy chủ mới, nhưng nhận ra quyền này chỉ cho phép người dùng xem cơ sở dữ liệu hệ thống.

Tôi đang cố gắng tạo ra một vai trò máy chủ chỉ đọc và có thể đọc bất kỳ cơ sở dữ liệu nào.

Có cách nào để tạo vai trò máy chủ do người dùng xác định để đọc cơ sở dữ liệu người dùng không? Hay tôi phải làm điều này thông qua ánh xạ người dùng cho mỗi người dùng?

Câu trả lời:


16

Đăng bài này như một câu trả lời chỉ vì nó quá dài cho một bình luận, và bởi vì nó sẽ có liên quan đến những người dùng khác khá sớm.

SQL Server 2014 bổ sung một số quyền cấp độ máy chủ mới sẽ hỗ trợ chính xác loại kịch bản này - chúng được thiết kế để kiểm toán, nhưng loại yêu cầu này dường như cũng phù hợp với dự luật đó. Bạn chỉ có thể thêm hai quyền sau vào đăng nhập cấp máy chủ:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

Cái trước, giống như âm thanh, cho phép đăng nhập kết nối với bất kỳ cơ sở dữ liệu nào. Điều tuyệt vời ở đây là nó sẽ cho phép điều này ngay cả đối với các cơ sở dữ liệu được tạo trong tương lai (miễn là bạn không đặt từ chối rõ ràng, đó là cách bạn có thể bảo vệ cơ sở dữ liệu người dùng khỏi các thông tin đăng nhập có quyền này). Sau đó cho phép đăng nhập để thực hiện thao tác đọc trên bất kỳ cơ sở dữ liệu họ có quyền truy cập vào - để họ có thể SELECTtừ các bảng, quan điểm, UDFs vv nhưng họ sẽ không thể thực hiện bất kỳ UPDATEhoạt động (tôi đã không kiểm tra nếu phép này hiểu khi một thủ tục lưu trữ thực hiện DML). Các kết hợp này hoạt động rất tốt nếu bạn muốn cung cấp quyền truy cập đọc mở rộng đăng nhập cho toàn bộ máy chủ hoặc để chi tiết hơn, bạn có thể cấp các CONNECTđặc quyền truyền thống cho các cơ sở dữ liệu nhất định và SELECT ALL USER SECURABLESquyền sẽchỉ có chức năng cho những cơ sở dữ liệu mà đăng nhập có quyền truy cập rõ ràng.

Những thay đổi bảo mật năm 2014 được ghi lại ở đây - tốt, một phần; họ quên mất quyền cấp cơ sở dữ liệu ALTER ANY DATABASE EVENT SESSION- mặc dù điều đó không liên quan ở đây.


Cảm ơn câu trả lời mở rộng này cho các máy chủ sắp tới. Là hoạt động / kiểm tra này là ở cấp độ máy chủ. Có bất kỳ ý kiến ​​về nếu mức độ tương thích DB. Vậy nếu DB CL là 2012, tính năng 2014 có còn hoạt động không?
SnapJag

@SnapJag Mức độ tương thích không có bất kỳ liên quan nào đến các tính năng bảo mật, chủ yếu là về cách T-SQL được phân tích cú pháp và cách trình tối ưu hóa tạo các kế hoạch truy vấn.
Aaron Bertrand

@AaronBertrand Bạn có biết nếu chúng tôi có thể đặt quyền cho các vai trò cấp máy chủ để cho phép cập nhật trên bất kỳ cơ sở dữ liệu nào không? (vai trò cố định sysadmin có thể chắc chắn, nhưng chúng ta có thể làm điều đó cho vai trò máy chủ do người dùng xác định không?)
MaxiWheat

@MaxiWheat Không, không thể nghĩ ra bất kỳ cách tầm thường nào để làm điều đó, xin lỗi.
Aaron Bertrand

FWIW này sẽ không hoạt động cho Cơ sở dữ liệu SQL Azure. CẤP KẾT NỐI MỌI NỀN TẢNG ĐẾN [NameOfUserOrgroup] Lớp bảo mật 'máy chủ' không được hỗ trợ trong phiên bản SQL Server này.
Dzejms

8

Không có quyền cấp máy chủ 'đọc bất kỳ quyền nào của cơ sở dữ liệu' và vai trò cấp máy chủ không thể được cấp quyền cấp cơ sở dữ liệu

Vì vậy, có, bạn sẽ phải ánh xạ người dùng đến cơ sở dữ liệu cá nhân. Nếu bạn đang sử dụng Active Directory, bạn có thể tạo một nhóm cửa sổ, sau đó cung cấp cho nhóm đó đăng nhập vào SQL Server, sau đó áp dụng db_datareader trong tất cả các cơ sở dữ liệu cho nhóm đó (mặc dù bạn sẽ cần tạo người dùng trong mỗi cơ sở dữ liệu).

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.