Como posso dar permissão de usuário do SQL Server para executar um procedimento armazenado e nada mais?

2

Eu preciso monitorar remotamente o espaço em disco em um servidor SQL 2005. Para fazer isso, preciso dar a um usuário do sql server a capacidade de executar o seguinte procedimento armazenado:

EXEC xp_fixeddrives;

Idealmente, este usuário não teria permissão para executar outros procedimentos armazenados ou fazer muito mais do que isso.

O novo usuário que acabei de criar atualmente não tem permissão para executar o procedimento armazenado. Qual é a melhor maneira de dar ao usuário permissão para fazer isso e nada mais?

    
por Dave Forgac 06.11.2009 / 20:05

3 respostas

1

xp_fixeddrives é um procedimento não documentado. Então, basicamente, não existe. Não há maneira documentada de conceder, negar ou revogar qualquer permissão e o resultado da execução pode ser basicamente qualquer coisa.

Dito isso, você pode tentar envolver o XP em um procedimento comum, depois usar a assinatura de código para conceder as permissões necessárias ao procedimento e conceder o EXEC ao usuário no wrapper, semelhante ao exemplo no meu blog: Assinando um procedimento ativado . Isso funciona na minha máquina. Sua milhagem pode variar, como é o caso sempre que você usar a funcionalidade não documentada:

use master;
go

create procedure usp_fixeddrives
with execute as caller
as
begin
  exec xp_fixeddrives;
end
go

grant execute on usp_fixeddrives to [low_priviledged_user];
go

create certificate [usp_fixeddrives]
  encryption by password = 'AnyPassword@1234!'
  with subject = N'usp_fixeddrives'
  , start_date = '11/05/2009';
go

add signature to [usp_fixeddrives]
  by certificate [usp_fixeddrives]
    with password ='AnyPassword@1234!';
go

create login [usp_fixeddrives] from certificate [usp_fixeddrives];
go

grant authenticate server to [usp_fixeddrives];
grant control server to [usp_fixeddrives];
go

alter certificate [usp_fixeddrives] remove private key;
go
    
por 07.11.2009 / 01:50
1

Deve ser capaz de fazer:

conceder execução em xp_fixeddrives para username

    
por 06.11.2009 / 20:17
0

Você precisará usar EXECUTE AS para isso no SQL 2005 e (I pense) represente um administrador de sistema que também seja um administrador do servidor físico. Um usuário comum não tem direitos sobre o sistema de arquivos, portanto, nenhum resultado. No SQL 2000, simplesmente conceder-lhes direitos ao SP teria funcionado.

    
por 06.11.2009 / 22:28