Hoje fui abordado com uma questão interessante por um amigo:
“Tem um desenvolvedor aqui na empresa que mesmo que eu combine com ele que não é pra alterar uma procedure, ele vai lá e altera ela”
ps do Marcelo: dar poder pro DEV e pedir pra não alterar algo é que nem dar doce pra criança e pedir pra não comer!
Brincadeiras à parte, se não fossem Desenvolvedores não haveria a necessidade de banco de dados e eu morreria de fome! Sou amigo de vários inclusive.
A necessidade dele é simples:
- O dev pode ver qualquer definição de PROC, VIEW, TABLE, etc.
- O dev NÃO pode alterar absolutamente NADA!
- Se um sistema criar uma procedure futuramente o dev precisa ter permissão automaticamente pra essa nova proc sem que eu (lazy) dba mova um dedo.
A solução: GRANT VIEW DEFINITION, caso precise permitir também que ele execute as procs no mesmo padrão, GRANT EXECUTE on schema::[schema]
No vídeo abaixo ilustro melhor e mostro o funcionamento com exemplos. Os scripts estão um pouco mais abaixo.
Espero que ajude!
Happy SQLSERVING!
[feather_share]
Scripts:
Para excutar como DBA logado:
[sql]
–um usuario
–usuario pode VER definições de metadados (corpo de procedures, views, etc)
–não deve alterar nada
–10 procs as 16:00
–grant view definition on proc to user
–18:00 – sistema criou mais 5 procs
–GRANT VIEW DEFINITION TO user
——————————–
–10 procs
–grant execute on proc to user
–cria mais 5 procs
–grant execute on schema::[dbo] to user
—————————————————
–Script para teste de validação de grant:
create login pombo with password = ‘Pa$$w0rd’;
GO
create user pombo for login [pombo]
GO
——————————————–
–cria procs:
–1
create procedure proc_teste_1
as
begin
print ‘Hello proc 1’
end
GO
–2
create procedure proc_teste_2
as
begin
print ‘Hello proc 2’
end
GO
–3
create procedure proc_teste_3
as
begin
print ‘Hello proc 3’
end
GO
——————————————————————–
–valida permissões:
sp_helprotect
———————-
–grants:
GRANT VIEW DEFINITION to Pombo;
GRANT EXECUTE ON schema::[dbo] to Pombo;
[/sql]
Para excutar como usuário POMBO logado:
[sql]
–ver metadados
sp_helptext ‘proc_teste_1’
sp_helptext ‘proc_teste_2’
–altera a definição
–nao funciona, não há permissão de ALTER
GO
alter procedure proc_teste_2
as
begin
print ‘Hello proc 22’
end
GO
–execução das procs
exec proc_teste_1
go
exec proc_teste_2
–depois de criada
exec proc_teste_3
[/sql]