Array
(
)

Utilização de triggers para auditoria

Felipe_cduarte
   - 14 out 2004

Fala pessoal blz ??

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,

Robertolucio
   - 14 out 2004

Oi Felipe,

Cara estou tentando isso tbém, mas por enquanto não consegui. Se descobrires algo, por favor retorna.

Att,
Roberto

Marcus.magalhaes
   - 14 out 2004

Bom dia Felipe e Roberto.

Vc podem utilizar as tabelas inserted e deleted para isso.

Ex.:
#Código

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 deleted é a tabela que armazena os dados que foram apagados e inserted os que foram inseridos, no caso do update ele popula as 2 tabelas.

Att,

Felipe_cduarte
   - 14 out 2004

Fala Marcus blz ???

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

Marcus.magalhaes
   - 14 out 2004

Oi Felipe.

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,

Felipe_cduarte
   - 15 out 2004

Fala Marcus blz ???

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



Marcus.magalhaes
   - 15 out 2004

Bom dia Felipe.

Isso mesmo...tb dá.

Att,