ustify>

Capa SQl 33

Clique aqui para ler todos os artigos desta edição

Auditoria no SQL Server 2005

Implemente usando Trigger de DDL

 

Trigger podem ser definidas como sendo um tipo especial de stored procedure que executa automaticamente quando um determinado evento de insert, update ou delete ocorre no banco de dados. Até então nenhuma novidade. A novidade está na capacidade do SQL Server 2005 permitir a criação de triggers associados a eventos que não são apenas de DML – data manipulation language, mas também de DDL – Data Definition Language.

A adição dessa funcionalidade abre possibilidades para a criação de estratégias antes difíceis de serem implementadas. Por exemplo, quem nunca se perguntou: “Este campo não existia nessa tabela. Quem criou?”; “Quem excluiu do banco o user xpto?”; “A tabela de funcionários foi dropada?”; “Por quem?”. Todas essas perguntas podem ser respondidas através da implementação de uma estratégia de auditoria usando triggers de DDL no SQL Server 2005.

Em equipes de desenvolvimento enxutas, em que não há a figura de um profissional exclusivo para cuidar do banco de dados - DBA, esse recurso é particularmente interessante. Comandos como: CREATE, ALTER, DROP, GRANT, DENY, REVOKE, ou UPDATE STATISTICS podem ser associados a triggers que serão disparados quando tais eventos acontecerem. Essa característica torna mais fácil o gerenciamento dos objetos de bancos dados quanto à criação, alteração ou exclusão além de permitir a reconstrução do que foi alterado no banco em determinada versão da aplicação (versionamento de aplicação).

Ao longo deste artigo utilizaremos o poderoso recurso de triggers de DDL para a criação de uma estratégia de auditoria visando monitorar alterações na estrutura de objetos de bancos de dados. Tais estratégias são fundamentais para a garantia da rastreabilidade das mudanças realizadas num dado objeto de banco de dados. Dessa forma, pode-se manter o histórico das alterações ocorridas nos objetos.

Mudanças na sintaxe

A sintaxe de um trigger de DDL é ligeiramente diferente da sintaxe de um trigger de DML. Temos abaixo a sintaxe:

CREATE TRIGGER trigger_name

ON { ALL SERVER | DATABASE }

[ WITH <ddl_trigger_option> [ ,...n ] ]

...

Quer ler esse conteúdo completo? Tenha acesso completo