Usuário com melhor resposta
Como dar permissao nesse caso?

Pergunta
-
Desenvolvi uma procedure com comando dinamico para acessar bancos e tabelas dinamicamente.
SET @sql =
'SELECT xxx as [EMIt],
ISNULL(ROUND(SUM(CASE WHEN ppp_PRODUT NOT in (''00000000010000'',''00000000010001'',''00000000099998'') THEN ppp_vlr END),2),0.00) AS [Tota],
...
FROM ' + @ttt + ...
Exec (@sql)
@ttt é setado conforme condições de input da procedure
Criei um usuario somente com permissao de exec mas ocorre o seguinte erro
Msg 916, Level 14, State 1, Line 1
The server principal "USER02" is not able to access the database "reg_01" under the current security context.
reg_01 is one of databases that I have.
Como faço para dar permissao ao usuario executar a procedure sem ter que dar permissao de leitura para as tabelas que teria que acessar e estao dinamicas?
Respostas
-
haichu1,
Uma alternativa seria utilizar o comando Execute As User ou Execute As Login, talvez possa ser uma forma de mesmo você estando simultaneamente conectado com logins ou users distintos no momento da execução da sua Stored Procedure utilizar um usuário ou login específico.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Robson William Silva segunda-feira, 27 de fevereiro de 2017 13:24
Todas as Respostas
-
-
Carlos, fiz a procedure com comando dinamico para acessar banco de dados e tabelas de modo enxuto.
Atualmente já tenho 30 bancos e mais de 50 tabelas por banco que o usuario vai acessar atraves da procedure
justamente para evitar dar permissão de leitura e escrita para cada tabela que contem dentro da base..
-
haichu1,
Uma alternativa seria utilizar o comando Execute As User ou Execute As Login, talvez possa ser uma forma de mesmo você estando simultaneamente conectado com logins ou users distintos no momento da execução da sua Stored Procedure utilizar um usuário ou login específico.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Robson William Silva segunda-feira, 27 de fevereiro de 2017 13:24
-
Se voce cria uma procedure em uma base e essa procedure acessa tabelas de outras bases, só a permissão de exec na proc não vai funcionar.
Vai ter que liberar a leitura em todas essas tabelas que são acessadas em outras databases.
Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/