SQL Server – Trigger para prevenir e impedir alterações em tabelas

SQL Server – Trigger para prevenir e impedir alterações em tabelas
Avalie esse post

Olá pessoal!

Uma necessidade corriqueira de DBA’s é evitar acessos e operações indevidas ou equivocadas, que até mesmo o próprio DBA pode acabar tendo um descuido e executar uma operação errada. A minha ideia nesse post, é demonstrar algumas soluções utilizando triggers.

Caso você queira apenas monitorar as alterações realizadas na tabela, veja mais no post SQL Server – Como criar um histórico de alterações de dados para suas tabelas (logs para auditoria).

Criação da tabela de testes

Evitar comandos DML na tabela (Tabela somente leitura)

Caso você não queira permitir operações de DML (INSERT, UPDATE e DELETE) na sua tabela, transformando-a assim, em uma tabela somente leitura (read-only table), basta criar a trigger abaixo:

Resultado:

Evitar DELETE ou UPDATE sem where

Um erro muito comum no dia a dia do DBA, é quando algum analista ou desenvolvedor envia um script de UPDATE ou DELETE para o DBA executar e eles esquecem de colocar a cláusula WHERE. Imaginem o estrago que isso pode gerar no banco de dados.. Uma forma de evitar isso, é utilizando plugins e add-ons, como Redgate SQL Prompt e AplexSQL Complete, que alertam o DBA quando isso vai ocorrer.

Uma outra forma (e mais confiável), é criar uma trigger para isso:

Resultado:

Permitir apenas 1 registro alterado por vez na tabela

Uma outra necessidade que pode ocorrer em algumas tabelas, é exigir que apenas 1 registro da tabela seja alterado por vez através de uma operação de DELETE/UPDATE:

Ao tentar atualizar mais de um registro, a trigger irá barrar a operação:

Apresentadas as soluções acima, espero ter tirado suas dúvidas sobre restrição de DML no SQL Server utilizando Triggers. Esse é um recurso bem antigo do SGBD, odiado por uns, amado por outros e que tem sim, sua utilidade quando bem aplicado e seu uso é justificado.

Espero que tenham gostado desse post e caso tenham dúvidas, deixem aqui nos comentários.
Um abraço e até o próximo post!

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

One Comment

Deixe uma resposta