lunes, 18 de enero de 2010

Auditar uso o supresión de un objeto

A veces nos puede interesar auditar el uso o eliminación de un objeto por varias razones:
  • Investigar quien, cuando y que lo usa/elimina un objeto.
  • Investigar si podemos eliminar un objeto sin uso.
  • Análisis el funcionamiento de una aplicación nuestra, o de terceros.
  • Etc...
USO DE UN OBJETO
Para ello debemos cambiar el valor de auditoria del objeto, que por omision tendrá el valor indicado en los atributos de la biblioteca, utilizar mandato DSPLIBD LIB(MYLIB) y fijarse en parámetro "Create object auditing" si tiene el valor *SYSVAL habremos de ver el valor de sistema QCRTOBJAUD (utilizar DSPSYSVAL SYSVAL(QCRTOBJAUD) para verlo) que habitualmente tiene el valor *CHANGE, o sea solo audita cambios en el objeto, no su utilización.

Para auditar el uso de un objeto, por ejemplo del programa MYLIB/MYPGM, debemos cambiar el valor de auditoria del objeto, antes documentaremos el valor actual de auditoria para el objeto a cambiar:

DSPOBJD OBJ(MYLIB/MYPGM) OBJTYPE(*PGM) DETAIL(*FULL)
Pulsar AvPág y ver parámetro "Object auditing value", usualmente *CHANGE.

Después ya podemos activar la auditoria de lecturas para el objeto, para ello ejecutar:

CHGOBJAUD OBJ(MYLIB/MYPGM) OBJTYPE(*PGM) OBJAUD(*ALL)

A partir de este instante cualquier acceso al programa MYLIB/MYPGM quedara registrado en el diario de auditoria del sistema (QAUDJRN).

Cuando queramos analizar el uso de ese programa deberemos acceder a los datos del diario de auditoria, para ello lo más recomendable es someter el comando DSPJRN para realizar un volcado de los datos del diario a un archivo temporal y posteriormente realizar un query sobre ese fichero:

Someter:
DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(dia/hora_inicio) TOTIME(dia/hora_fin) ENTTYP(ZR) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(MYLIBTEMP/DSPJRNUSE)

Después con SQL, por ejemplo, podemos buscar las utilizaciones del objeto:
SELECT * FROM TEMP/DSPJRN WHERE JOESD LIKE '%MYPGM%'

Dentro de los campos, que se nos mostraran, tendremos algunos claves para nuestra investigación:
Campo    Descripción
JOCODE   Código de auditoría
JOENTT   Tipo entrada de auditoria
JODATE   Fecha de la entrada

JOTIME   Hora de la entrada
JOJOB    Nombre del trabajo
JOUSER  
Nombre del usuario
JONBR    Numero del trabajo
JOPGM    Nombre del programa que ha realizado el cambio
JOOBJ    Nombre del objeto cambiado
JOLIB
    Biblioteca del objeto cambiado
JOMBR
    Nombre del miembro (si es un archivo)
JOESD      Datos de la entrada (longitud variable

Una vez analizado el uso del objeto, es recomendable dejar el valor de auditoria al valor anterior, para evitar demasiada sobrecarga en el sistema al tener que guardar en el diario cada vez que se utiliza un objeto, así como el crecimiento desmesurado de los receptores asociados del diario

También es recomendable no dejarlo activado el valor para muchos objetos al mismo tiempo, por las mismas razones.

SUPRESIÓN DE UN OBJETO
Si lo que buscamos es quien y cuando se ha eliminado un objeto, debemos volcar a fichero unos códigos de diario de auditoria diferentes:

DSPJRN JRN(QAUDJRN) RCVRNG(*CURCHAIN) FROMTIME(dia/hora inicio) TOTIME(dia/hora fin) JRNCDE((T)) ENTTYP(DO) OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(MYLIBTEMP/DSPJRNDLT)

Después utilizaremos la misma consulta SQL que en el caso anterior.

Nota1: Si queremos la fecha en formato TIMESTAMP utilizar OUTFILFMT(*TYPE3)
Nota3: Podemos ver el significado de los codigos de auditoria en el IBM i Information Center.
Nota2: Tener en cuanta el periodo de latencia en el sistema de los receptores de los diarios de auditoria, ya que es habitual su borrado periódico para evitar ocupar demasiado espacio en disco

No hay comentarios: