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?

carlo.borreo
fonte
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;
Mike Fal
fonte
Aqui está o link para o manual: msdn.microsoft.com/en-us/library/ms188754%28v=sql.105%29.aspx
a_horse_with_no_name
@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