Cho phép chọn từ các bảng hệ thống


14

Tôi có cơ sở dữ liệu Microsoft SQL Server 2008 r2. Một người dùng được gọi là marie được xác định, người có thể truy cập các bảng trên cơ sở dữ liệu chính; cái này hoạt động tốt Bây giờ, tôi muốn marie có thể thực hiện truy vấn này:

SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame
  FROM sys.dm_tran_locks dl
  JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid

Các bảng liên quan là các bảng tổng thể; Làm thế nào để tôi cho phép marie đọc từ họ? Tôi đã cố gắng thực hiện như sau dbo:

GRANT ALL on sys.dm_tran_locks TO marie
GRANT ALL on sys.sysprocesses TO marie

Tuy nhiên, khi marie cố gắng thực hiện truy vấn trên, lỗi là:

Msg 297, Level 16, State 1, Line 1
The user does not have permission to perform this action.

Tôi đang làm gì sai?


Ngoài ra, bạn nên sử dụng sys.dm_exec_requests, sys.dm_exec_sessionsv.v. sysprocesseslà chế độ xem tương thích ngược và sẽ bị xóa khỏi sản phẩm tại một số điểm.
Aaron Bertrand

Câu trả lời:


25

Các khung nhìn hệ thống yêu cầu trạng thái hơi cao để xem, vì chúng rộng. Bạn sẽ muốn GRANT VIEW SERVER STATEcho điều này:

GRANT VIEW SERVER STATE TO marie;

Đây là liên kết đến hướng dẫn sử dụng: msdn.microsoft.com/en-us/l
Library / ms188754% 28v = sql.105% 29.aspx

@a_horse_with_no_name Cảm ơn, đã tìm kiếm điều đó. :) Liên kết được thêm vào để trả lời.
Mike Fal

Điều này không được hỗ trợ trong Azure SQL db - làm cách nào để đạt được tương đương ở đây?
tham gia

1
Hãy thử GRANT VIEW DATABASE STATE.
Mike Fal

Một số bảng bên dưới systhực sự có thể được chọn từ chỉ có quyền chọn của một cơ sở dữ liệu, chẳng hạn như sys.indexes.
Giă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.