Dê permissão para selecionar nas tabelas do sistema


14

Eu tenho um banco de dados Microsoft SQL Server 2008 r2. É definido um usuário chamado marie, que pode acessar tabelas no banco de dados principal; isso funciona bem. Agora, eu gostaria que a marie pudesse executar esta consulta:

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

As tabelas envolvidas são tabelas mestras; como eu permito que marie leia deles? Eu já tentei executar o seguinte como dbo:

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

Ainda assim, quando marie tenta executar a consulta acima, o erro é:

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

O que estou fazendo de errado?


Além disso, você deve usar sys.dm_exec_requests, sys.dm_exec_sessionsetc. sysprocessesé uma visão de compatibilidade com versões anteriores e será removida do produto em algum momento.
— Aaron Bertrand

Respostas:


25

As visualizações do sistema exigem um estado ligeiramente elevado para serem visualizadas, pois são amplas para a instância. Você vai querer GRANT VIEW SERVER STATEisso:

GRANT VIEW SERVER STATE TO marie;


@a_horse_with_no_name Obrigado, estava procurando por isso. :) Link adicionado à resposta.
— Mike Fal 12/02

Isso não é suportado no Azure SQL db - como faço para obter o equivalente aqui?
— tommed 30/09/16

1
Tente GRANT VIEW DATABASE STATE.
— Mike Fal

Algumas tabelas abaixo syspodem realmente ser selecionadas apenas com permissões de seleção de um único banco de dados, como sys.indexes.
— John
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.