Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Como hacer una trigger de auditoría en ORACLE

Estas en el tema de Como hacer una trigger de auditoría en ORACLE en el foro de Oracle en Foros del Web. Hola a todos, fijense que estoy definiendo una mi pequeña base de datos, y estoy empezando a ver los triggers y se me ocurrio que ...
  #1 (permalink)  
Antiguo 20/04/2008, 16:13
Avatar de cadesa  
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 130
Antigüedad: 16 años, 7 meses
Puntos: 0
Como hacer una trigger de auditoría en ORACLE



Hola a todos, fijense que estoy definiendo una mi pequeña base de datos, y estoy empezando a ver los triggers y se me ocurrio que en cada tabla de mi base tendría que ir un trigger de auditoria en donde cada vez que una persona inserte grabe la información en dos columnas las que he definido como USUARIO_GRABACION, FECHA_GRABACION, y cuando actualice la información se grabe en USUARIO_MODIFICACION Y FECHA_MODIFICACION.

yo se que las fechas las puedo tomar con el "sysdate" pero con el usuario no se como hacerlo porque tengo una tabla en donde estan los datos de los usuarios, usuarios, contraseñas, y otras cosas.

Si alguno de ustedes supiera como hacer esto ayudeme, de verdad se los agradecería.
  #2 (permalink)  
Antiguo 20/04/2008, 21:54
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Como hacer una trigger de auditoría en ORACLE

para tener el usuario usa "USER", complementando investigate sobre la sentencia "audit" te permite hacer lo que necesitas y mas
__________________
Blogzote.com :-) Mi blog
  #3 (permalink)  
Antiguo 21/04/2008, 09:09
Avatar de cadesa  
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 130
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Como hacer una trigger de auditoría en ORACLE

gracias, lo investigaré
  #4 (permalink)  
Antiguo 02/06/2008, 09:15
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Como hacer una trigger de auditoría en ORACLE

Hola, podrías hacer un trigger que guarde el SqlText, de esta forma:

CREATE OR REPLACE TRIGGER TRIG_PAGO
AFTER DELETE OR INSERT OR UPDATE
ON PAGO -- TABLA A AUDITAR
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
SQ VARCHAR(255);
FC VARCHAR(255);
BEGIN
IF INSERTING THEN
select distinct
vs.sql_text,
to_char(to_date(vs.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time into SQ,FC
from
v$sqlarea vs,
all_users au
where (parsing_user_id != 0)
and (au.user_id(+)=vs.parsing_user_id)
and au.username=user
and first_load_time=(select max(first_load_time)
from v$sqlarea vs ,all_users au
where (parsing_user_id != 0)
and (au.user_id(+)=vs.parsing_user_id)
and au.username=user
and (executions >= 1))
and (executions >= 1);
INSERT INTO AUD_PAGO --TABLA QUE GUARDA LA AUDITORIA
VALUES
(SQ,USER,SYSDATE,USERENV('TERMINAL'));
END IF;
END;
  #5 (permalink)  
Antiguo 02/06/2008, 09:24
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Como hacer una trigger de auditoría en ORACLE

También puedes crear uno que guarde todo el registro:

CREATE OR REPLACE TRIGGER NOMBRE_TRIGGER
BEFORE INSERT
ON TABLA_A_AUDITAR
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TABLA_AUDITORIA
(AUD_USER,
AUD_FECHA,
AUD_TIPO,
AUD_TERMINAL)
VALUES
(USER,
SYSDATE,
'INSERT',
USERENV('TERMINAL'));
END IF;
END;

Espero que te sirva.
  #6 (permalink)  
Antiguo 03/06/2008, 21:04
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: Como hacer una trigger de auditoría en ORACLE

Cita:
Iniciado por Angubas Ver Mensaje
También puedes crear uno que guarde todo el registro:

CREATE OR REPLACE TRIGGER NOMBRE_TRIGGER
BEFORE INSERT
ON TABLA_A_AUDITAR
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TABLA_AUDITORIA
(AUD_USER,
AUD_FECHA,
AUD_TIPO,
AUD_TERMINAL)
VALUES
(USER,
SYSDATE,
'INSERT',
USERENV('TERMINAL'));
END IF;
END;

Espero que te sirva.
si mi teoria no me falla

si estas creando un trigguer

BEFORE INSERT

no tendrias la necesidad de identificar que transaccion se esta llevando a cabo

IF INSERTING THEN

siempre caeria ese if, por lo tanto es innecesario

por otro lado no tengo la informacion fresca para confirmar si un BEFORE INSERT se dispara despues de validaciones internas de oracle, como violar llaves primarias, foraneas, etc pero yo usaria un AFTER INSERT para esto
__________________
Blogzote.com :-) Mi blog
  #7 (permalink)  
Antiguo 04/06/2008, 06:12
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Como hacer una trigger de auditoría en ORACLE

Me parece ( aunque no estoy seguro ) que da igual si es BEFORE o es AFTER. Primero son las validaciones internas y luego la logica de programación.
  #8 (permalink)  
Antiguo 04/06/2008, 08:24
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Como hacer una trigger de auditoría en ORACLE

Hola:

-- Usuario que esta conectado a la sesión del equipo
select
rtrim(upper(sys_context('USERENV','OS_USER'))) username,
rtrim(upper(sys_context('USERENV','TERMINAL'))) userterminal
from dual


Saludos,
  #9 (permalink)  
Antiguo 06/06/2008, 21:08
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Como hacer una trigger de auditoría en ORACLE

Cita:
Iniciado por kikolice Ver Mensaje
si mi teoria no me falla

si estas creando un trigguer

BEFORE INSERT

no tendrias la necesidad de identificar que transaccion se esta llevando a cabo

IF INSERTING THEN

siempre caeria ese if, por lo tanto es innecesario

por otro lado no tengo la informacion fresca para confirmar si un BEFORE INSERT se dispara despues de validaciones internas de oracle, como violar llaves primarias, foraneas, etc pero yo usaria un AFTER INSERT para esto
Tienes toda la razon, solo queria mostrarle que podia hacerlo para Update o Delete. Gracias.
  #10 (permalink)  
Antiguo 14/07/2008, 08:45
 
Fecha de Ingreso: julio-2008
Mensajes: 8
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Como hacer una trigger de auditoría en ORACLE

como tomaria el nombre de la tabla y del campo que se modificaron en el caso de un UPDATE, y si es un DELETE que campo tomaria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:04.