Ir para conteúdo

Arquivado

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

Felipe Sbragia

[Trigger DDL] Pré-execução

Recommended Posts

Olá pessoal, boa tarde,

 

Estou criando uma TRIGGER DDL em meu BD para monitorar as alterações de alguns objetos (procs, views, etc.).

 

Nos meus clientes, as TRIGGERS ficarão criptografadas (WITH ENCRYPTION).

Porém, em minha base local (onde os Desenvolvedores atuam e onde irão criar/alterar/testar as procs), esta criptografia não pode ocorrer.

 

Como todos nós sabemos, dizer a um Desenvolvedor que ele deve retirar o comando WITH ENCRYPTION ao executar o comando na base local, é o mesmo que dizer a um macaco que ele não deve comer a banana (é só questão de tempo para que ele faça exatamente o contrário - e eu me incluo nisso :ermm: ). Neste caso, seria perdido o script pois em todos os locais estaria criptografado.

 

Resumidamente, o que eu quero é criar outra TRIGGER DDL para, ANTES de executar um comando (CREATE, ALTER...) verificar se o comando WITH ENCRYPTION foi utilizado e retirá-lo (ou simplesmente abortar a execução).

 

Alguém sabe como fazer isso ou conhece alguma outra forma de barrar isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Felipe

 

Quando o trigger DDL é disparado você pode criar uma variável do tipo XML e verificar no seu conteúdo se existe o texto "with encryption"; Em caso afirmativo, acredito que você possa cancelar a ação do trigger através do comando "rollback", aí você trata o erro diz para o programador tirar essa opção.

 

Faz um teste e diz pra gente se funcionou. Se eu lembrar de mais algum recurso, depois eu faço outro post.

 

Segue um exemplo de como pegar o XML:

declare @EventXML xml;
    set @EventXML = eventdata();

[]s

 

Fernando Silveira

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.