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?
sql-server
carlo.borreo
fonte
fonte
sys.dm_exec_requests
,sys.dm_exec_sessions
etc.sysprocesses
é uma visão de compatibilidade com versões anteriores e será removida do produto em algum momento.Respostas:
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 STATE
isso:fonte
GRANT VIEW DATABASE STATE
.sys
podem realmente ser selecionadas apenas com permissões de seleção de um único banco de dados, comosys.indexes
.