Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LPsantos

Permissões no SQL Server

Recommended Posts

Amigos! Criei um usuário somente leitura em um banco, depois criei 4 views para acesso customizado, mas este banco tem muitas tabelas (mais de 200) e queria restringir o acesso deste usuário a somente estas 4 tabelas. Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos! Criei um usuário somente leitura em um banco, depois criei 4 views para acesso customizado, mas este banco tem muitas tabelas (mais de 200) e queria restringir o acesso deste usuário a somente estas 4 tabelas. Alguém pode me ajudar?

é somente um usuário especifico?

Se fim, primeiro tem que dar o "DENY" nos objetos do db e após isso o "GRANT".

Como esta falando somente nas views, creio que os scripts abaixo podem lhe ajudar:

 

 

 
 
DECLARE @sql VARCHAR(MAX)
DECLARE @count BIGINT
declare @users varchar(max)
set @users = '  to "DOMAIN\GRUPO1" , "USER01" , "DOMAIN\GRUPO2"  ' -- COLOQUE OS USUARIOS
 
/************** TABELAS  e VIEWS - DENY *************/
set rowcount 0 
insert into #temp 
select name from sys.objects where type in ('U','V')
 
set rowcount 1 
select @count = id from #temp 
 
 
while @@rowcount <> 0 
begin 
     set rowcount 0 
     select @sql = ' DENY select on ' + name + @users from #temp where id = @count 
     exec (@sql)
     
     select @sql = ' DENY insert on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' DENY update on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' DENY delete on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' DENY alter on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
 
     delete #temp where id = @count 
     set rowcount 1 
select @count = id from #temp 
end 
set rowcount 0 
 
/************** TABELAS  e VIEWS - GRANT *************/
set rowcount 0 
insert into #temp 
select name from sys.objects where name in ('XXXX','ZZZZZ', 'GGGGG') -- OBJETOS A SEREM CONCEDIDOS ACESSOS
 
set rowcount 1 
select @count = id from #temp 
 
 
while @@rowcount <> 0 
begin 
     set rowcount 0 
     select @sql = ' grant select on ' + name + @users from #temp where id = @count 
     exec (@sql)
     
     select @sql = ' grant insert on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' grant update on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' grant delete on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
     select @sql = ' grant alter on ' + name + @users from #temp where id = @count 
     exec (@sql)
 
 
     delete #temp where id = @count 
     set rowcount 1 
select @count = id from #temp 
end 
set rowcount 0 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.