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!

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Scripts:

Para excutar como DBA logado:


--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;

Para excutar como usuário POMBO logado:

--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