Desenvolvimento de sistemas

Fernando Lino
E-mail: fernandolinox@gmail.com
Site: http://flinox.blogspot.com

sábado, 26 de março de 2011

Auditoria de tabelas usando triggers (Oracle)

Você que está pensando em implementar controle de auditoria em seu sistema aqui vai uma dica legal, mais eficiente e simples, ao invés de fazer a auditoria pelo código de sua aplicação você faz tudo pelo banco de dados, usando triggers... existem algumas premissas básicas para se usar este tipo de auditoria...


- A aplicação deve ser desktop que roda em um computador em rede e logado em um domínio, os usuários devem sempre se logar no sistema operacional através de seu usuário e senha para que a triggers pegue as informações necessárias do sistema operacional através do Oracle Client.


- A aplicação até pode ser executada via web, mas neste caso para identificar com .NET terá que usar o ODP.net ( Oracle Data Provider ) existe uma propriedade no ODP.net que você identifica o cliente (ClientId) assim a trigger conseguirá pegar o usuário.


Vamos ver como ficaria a trigger no oracle:

CREATE OR REPLACE TRIGGER "NOME_DO_SCHEMA"."NOME_DA_TABELA" BEFORE UPDATED
ON NOME_DO_SCHEMA.NOME_DA_TABELA
FOR EACH ROW
BEGIN
INSERT INTO NOME_DA_TABELA_DE_AUDITORIA
VALUES (
sysdate, -- DATA E HORA DO EVENTO
sys_context('USERENV','OS_USER'), -- NOME DO USUARIO (DESKTOP)
sys_context('USERENV','TERMINAL'), -- NOME DA MAQUINA DO USUARIO (DESKTOP)
sys_context('USERENV','CLIENT_IDENTIFIER'), -- NOME DO USUARIO (ODP.NET - ClientId)
:OLD.NOME_DO_CAMPO_QUE_DESEJA_AUDITAR, -- VALOR ANTIGO
:NEW.NOME_DO_CAMPO_QUE_DESEJA_AUDITAR, -- VALOR NOVO
);
END;
/

O USERENV no Oracle fornece informações sobre a sessão conectada no Oracle, existe uma séria de outros atributos interessantes para se auditar
como:


CURRENT_SQL - SQL Executada.
HOST - Nome da maquina.
IP_ADDRESS - Endereço IP do cliente.
OS_USER - Usuário do sistema operacional.
SERVER_HOST - Nome do servidor rodando a instância oracle.
Etc...


Mais informações em:
http://psoug.org/reference/sys_context.html

Nenhum comentário:

Postar um comentário