Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/03/2007, 09:44
cacr
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 19 años, 2 meses
Puntos: 7
Re: auditoría de datos, funciones y disparadores

Pip, te cuento que cómo lo resolví... y para otros lectores

1.- cree una función audit:
Código:
function audit() {
// query de auditoria
  $audit = "create temp table audit_tmp (usuario varchar(30), ip inet);";
  $audit .= " insert into audit_tmp values ('".$_SESSION['usr']."', '".$_SERVER['REMOTE_ADDR']."');";
echo $audit."<br>"; /*imprimir la query*/
  $this->Query_ID = pg_query($audit); /* vale decir que estoy usando una pequeña clase */
}
2.- llamo la función audit(), justo antes de hacer el insert, update o delete...

3.- creo una función que será llamada dsde un trigger, y que devuelve, obviamente, un trigger:
Código:
BEGIN
    IF (TG_OP = 'DELETE') THEN
            INSERT INTO ssc.auditor (id, user_session, op, nb_tabla, ip) VALUES (OLD.id,(SELECT usuario FROM audit_tmp),TG_OP,TG_RELNAME,(SELECT ip FROM audit_tmp));
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO ssc.auditor (id, user_session, op, nb_tabla, ip) VALUES (NEW.id,(SELECT usuario FROM audit_tmp),TG_OP,TG_RELNAME,(SELECT ip FROM audit_tmp));
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO ssc.auditor (id, user_session, op, nb_tabla, ip) VALUES (NEW.id,(SELECT usuario FROM audit_tmp),TG_OP,TG_RELNAME,(SELECT ip FROM audit_tmp));
            RETURN NEW;
        END IF;
  END
Me imagino, que hay forma de mejorar esto, pero así lo he resuleto, cuando sepa como mejorarlo, seguro que lo cambio...

Pendientes
__________________
Gracias de todas todas
-----
Linux!