Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 20-abr-2008, 16:13   #1 (permalink)
cadesa no se puede cailificar en este momento
 
Avatar de cadesa
 
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 82
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.
cadesa está desconectado   Responder Citando
Antiguo 20-abr-2008, 21:54   #2 (permalink)
kikolice ha deshabilitado el karma
 
Avatar de kikolice
 
Fecha de Ingreso: marzo-2004
Mensajes: 984
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
kikolice está desconectado   Responder Citando
Antiguo 21-abr-2008, 09:09   #3 (permalink)
cadesa no se puede cailificar en este momento
 
Avatar de cadesa
 
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 82
Re: Como hacer una trigger de auditoría en ORACLE

gracias, lo investigaré
cadesa está desconectado   Responder Citando
Antiguo 02-jun-2008, 09:15   #4 (permalink)
Angubas ha deshabilitado el karma
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Enviar un mensaje por Skype™ a Angubas
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;
Angubas está desconectado   Responder Citando
Antiguo 02-jun-2008, 09:24   #5 (permalink)
Angubas ha deshabilitado el karma
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Enviar un mensaje por Skype™ a Angubas
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.
Angubas está desconectado   Responder Citando
Antiguo 03-jun-2008, 21:04   #6 (permalink)
kikolice ha deshabilitado el karma
 
Avatar de kikolice
 
Fecha de Ingreso: marzo-2004
Mensajes: 984
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
kikolice está desconectado   Responder Citando
Antiguo 04-jun-2008, 06:12   #7 (permalink)
jc3000 ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 258
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.
jc3000 está desconectado   Responder Citando
Antiguo 04-jun-2008, 08:24   #8 (permalink)
Michelc ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 21
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,
Michelc está desconectado   Responder Citando
Antiguo 06-jun-2008, 21:08   #9 (permalink)
Angubas ha deshabilitado el karma
 
Fecha de Ingreso: junio-2008
Mensajes: 6
Enviar un mensaje por Skype™ a Angubas
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.
Angubas está desconectado   Responder Citando
Antiguo 14-jul-2008, 08:45   #10 (permalink)
leml1979 ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 4
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
leml1979 está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 4,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:26.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93