Utilização de triggers para auditoria
14/10/2004
0
alguem tem exemplos de como utilizar triggers para auditoria ?? como por exemplo se um usuário alterar ou excluir dados de uma tabela, essa informação ser armazenada em uma tabela de auditoria.
Agradeço pela ajuda,
Felipe_cduarte
Posts
14/10/2004
Robertolucio
Cara estou tentando isso tbém, mas por enquanto não consegui. Se descobrires algo, por favor retorna.
Att,
Roberto
14/10/2004
Marcus.magalhaes
Vc podem utilizar as tabelas [b:9e6dc1c5c4]inserted[/b:9e6dc1c5c4] e [b:9e6dc1c5c4]deleted[/b:9e6dc1c5c4] para isso.
Ex.:
Create Trigger trg_tabela On tabela for update, delete As Begin Insert Into audit_table_deleted (codigo, desc) Select codigo, desc From deleted Insert Into audit_table_inserted (codigo, desc) Select codigo, desc From inserted End GO
Onde [b:9e6dc1c5c4]deleted[/b:9e6dc1c5c4] é a tabela que armazena os dados que foram apagados e [b:9e6dc1c5c4]inserted[/b:9e6dc1c5c4] os que foram inseridos, no caso do update ele popula as 2 tabelas.
Att,
14/10/2004
Felipe_cduarte
po eu dei uma pesquisada sobre o inserted e o deleted e resolveu parcialmente meu problema hehehe .. eu preciso agora pegar o usuario q fez a alteração, só q nao posso utilizar o login do nt ( com a funcao system_user() ) pq nos sistemas da minha empresa utilizamos um controle de acesso ( q é um sistema desenvolvido aki tb ) ... nele temos as tabelas e controlamos o acesso aos módulos nas aplicações... estava pensando .. só se esse sistema na hora q cadastrar os usuários incluir no SQL Server um usuario (login via SQL ) tb.. vc acha viavel ??
[]´s
14/10/2004
Marcus.magalhaes
O q vc pode fazer então é:
- Fazer com que o usuário se logue no sistema com um usuário válido no sql server;
- Armazenar este usuário em uma variável; e
- quando salvar os dados da inserted e da deleted, acrescentar a informação do usuário.
Eu também postei uma resposta para a Ligia (http://delphiforum.icft.com.br/forum/viewtopic.php?t=50984) sobre uma forma de fazer auditoria, capturando todos os comandos executados por todos os usuários. Dá uma olhada lá e vê se te atende.
Att,
15/10/2004
Felipe_cduarte
Acho q vamos ter q implementar isto nos sistemas mesmo... mas voltando ao assunto do usuario válido no sql, eu nao entendi esse armazenamento do usuario em uma variavel... se ele estiver cadastrado, com a função system_user() eu nao consigo pegar ele ??
minha trigger:
CREATE TRIGGER trg_teste
ON tab_clientes
for update
AS
BEGIN
insert into tab_clientes_audt ( ccliente, ncliente, cpfcliente, data, usuario )
select ccliente,
ncliente,
cpfcliente,
GETDATE(),
system_user
from deleted
END
+- isso né hehehe
[]´s