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.