GO
Em 2 de agosto de 2011 22:36, Rodrigo <rrbb...@gmail.com> escreveu:
Ops, confundi sua pergunta... Module Signing nao atenderia...Eu tambem ja tentei algo parecido... o foda é que create e alter sao a niveis de schema...Uma das solucoes que já vir por ai, conceder a permissao de ALTER, mas criar uma trigger DDL que impeça o alter em outros objetos...Se for 2008, como Policy Based Managment fica mais fácil, acredito eu.
-- Cria um banco de dados
CREATE
DATABASE B
-- Muda o contexto
USE
B
-- Cria um usurio
CREATE
USER Usr WITHOUT LOGIN
-- Cria uma SP
CREATE
PROCEDURE P1 As SELECT 1
GO
-- Cria uma tabela
CREATE
TABLE T (ID INT)
-- Concede permisso de criao e alter de SPs para Usr
-- Concede um GRANT para o Schema dbo (supostamente onde a SP ficar)
GRANT
CREATE PROCEDURE TO Usr
GRANT
ALTER ON SCHEMA::dbo TO Usr
-- Muda o contexto de execuo
EXECUTE
As USER = 'Usr'
-- Verifica que o contexto foi trocado
SELECT
USER_NAME()
-- Cria uma SP nova
CREATE
PROCEDURE P2 As SELECT 2
GO
-- Altera a SP antiga
ALTER
PROCEDURE P1 As SELECT 0
-- Exclui a SP antiga (efeito colateral mesmo sem o DROP)
DROP
PROCEDURE P1
-- Tenta dropar a tabela (efeito colateral mesmo sem o DROP TABLE)
DROP
TABLE T
-- Tenta criar uma tabela (essa no funcionou)
CREATE
TABLE T (ID INT)
-- Reverte o contexto
REVERT
-- Dropa o usurio
DROP
USER Usr
-- Muda o contexto
USE
master
-- Dropa a base
DROP
DATABASE B