Accendere il giornale di audit e leggerlo con SQL

Accedi per salvare

QAUDJRN registra chi ha fatto cosa e quando. Non è attivo di serie e non è attivabile retroattivamente: gli eventi antecedenti all'attivazione non sono ricostruibili da nessun'altra fonte.

Verificare lo stato

DSPSYSVAL SYSVAL(QAUDCTL)

*NONE significa audit disattivato. *AUDLVL significa attivo, con gli eventi indicati da QAUDLVL e QAUDLVL2.

Attivarlo

CHGSECAUD QAUDCTL(*AUDLVL) QAUDLVL(*DFTSET)

Il comando non si limita a impostare i valori di sistema: se il giornale QAUDJRN non esiste in QSYS, lo crea insieme al primo ricevitore e lo collega. Richiede i diritti speciali *ALLOBJ e *AUDIT.

Se l'audit non è mai stato attivato, le query di questo articolo non girano:

SQL0443  DISPLAY_JOURNAL ... JOURNAL QAUDJRN NOT FOUND IN LIBRARY QSYS

*DFTSET attiva l'insieme predefinito di eventi.

In alternativa i livelli si indicano singolarmente: *AUTFAIL, *CREATE, *DELETE, *SECURITY e gli altri.

La crescita dei ricevitori va pianificata contestualmente. Un audit attivo senza una procedura di distacco e cancellazione dei ricevitori occupa spazio in modo continuo e senza soglia. La procedura è in liberare spazio dai journal receiver, e va messa in calendario nello stesso intervento in cui si attiva l'audit.

Le funzioni di interrogazione

Le registrazioni sono classificate per tipo di voce:

  • PW Tentativi di password

  • AF Fallimenti di autorizzazione

  • CP Modifiche ai profili utente

  • CD Comandi eseguiti

  • SV Modifiche ai valori di sistema

Per ciascun tipo esiste una funzione di tabella dedicata:

SELECT * FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_PW());

La libreria è SYSTOOLS, non QSYS2. È l'unica famiglia rilevante di servizi SQL non presente in QSYS2.

Senza argomenti la finestra è l'ultimo giorno. I parametri sono comuni a tutte le funzioni della famiglia:

Parametro

Predefinito

STARTING_TIMESTAMP

ieri

ENDING_TIMESTAMP

adesso

USER_NAME

tutti

JOB

tutti

PROGRAM

tutti

STARTING_RECEIVER_NAME

CURAVLCHN

ENDING_RECEIVER_NAME

*CURRENT

Tre interrogazioni di base

Tentativi di autenticazione falliti negli ultimi sette giorni:

SELECT ENTRY_TIMESTAMP, USER_NAME, QUALIFIED_JOB_NAME,
       REMOTE_ADDRESS, VIOLATION_TYPE_DETAIL
  FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_PW(
         STARTING_TIMESTAMP => CURRENT TIMESTAMP - 7 DAYS))
 ORDER BY ENTRY_TIMESTAMP DESC;

Accessi negati per mancanza di diritti, con l'oggetto richiesto:

SELECT ENTRY_TIMESTAMP, USER_NAME, OBJECT_LIBRARY, OBJECT_NAME, OBJECT_TYPE
  FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_AF(
         STARTING_TIMESTAMP => CURRENT TIMESTAMP - 7 DAYS))
 ORDER BY ENTRY_TIMESTAMP DESC;

Modifiche ai profili utente nell'ultimo mese:

SELECT ENTRY_TIMESTAMP, USER_NAME, USER_PROFILE, ENTRY_TYPE_DETAIL,
       PREVIOUS_SPECIAL_AUTHORITIES, SPECIAL_AUTHORITIES
  FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_CP(
         STARTING_TIMESTAMP => CURRENT TIMESTAMP - 30 DAYS))
 ORDER BY ENTRY_TIMESTAMP DESC;

Due colonne qui vanno distinte, e confonderle fa leggere l'elenco al contrario:

USER_NAME è chi ha fatto la modifica, USER_PROFILE è il profilo modificato.

PREVIOUS_SPECIAL_AUTHORITIES e SPECIAL_AUTHORITIES sono il prima e il dopo. È la coppia che risponde alla domanda che si fa davvero durante una revisione: chi ha dato *ALLOBJ a chi, e quando, senza doverla ricostruire confrontando due fotografie di USER_INFO prese in momenti diversi. Il giornale la porta già in una riga.

Il prima e il dopo esistono per ogni diritto speciale, uno per uno. Accanto alle due colonne riassuntive ci sono ALLOBJ, SECADM, SAVSYS, SPLCTL, SERVICE, AUDIT,

JOBCTL, IOSYSCFG e i corrispondenti PREVIOUS_. Servono quando la domanda riguarda un diritto solo: filtrare su ALLOBJ è più preciso che cercare una stringa dentro SPECIAL_AUTHORITIES.

AUDIT_JOURNAL_AF è la più informativa delle tre in fase di analisi: i fallimenti di autorizzazione descrivono i percorsi tentati, non solo quelli riusciti.

Le colonne non sono le stesse per tutte. I parametri sì, le colonne no: oltre a un nucleo comune ogni funzione ne espone di proprie, legate al tipo di voce. La descrizione testuale, per dire, su AUDIT_JOURNAL_PW si chiama VIOLATION_TYPE_DETAIL e su AUDIT_JOURNAL_CP ENTRY_TYPE_DETAIL. Prima di scrivere una query su una funzione nuova conviene guardare cosa restituisce davvero:

SELECT * FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_CD()) WHERE 1 = 0;

La condizione sempre falsa non restituisce nessuna riga e lascia le intestazioni.

Esempio: dall'attivazione alla prima lettura

Sequenza completa su un sistema in cui l'audit non è mai stato attivato.

DSPSYSVAL SYSVAL(QAUDCTL)

Se restituisce *NONE, si attiva:

CHGSECAUD QAUDCTL(*AUDLVL) QAUDLVL(*DFTSET)

Da questo momento le registrazioni si accumulano. Per generarne subito una basta un tentativo di collegamento con una password errata; dopo qualche minuto la lettura seguente è insieme la prova che il giornale è stato creato e che sta registrando:

SELECT ENTRY_TIMESTAMP, USER_NAME, REMOTE_ADDRESS, VIOLATION_TYPE_DETAIL
  FROM TABLE(SYSTOOLS.AUDIT_JOURNAL_PW())
 ORDER BY ENTRY_TIMESTAMP DESC;

Le righe che seguono sono illustrative, servono a mostrare la forma dell'esito e non provengono da un sistema reale.

ENTRY_TIMESTAMP             USER_NAME  REMOTE_ADDRESS  VIOLATION_TYPE_DETAIL
2026-08-26 09:14:52.318000  MROSSI     10.0.7.44       Password non valida
2026-08-26 09:14:31.007000  MROSSI     10.0.7.44       Password non valida
2026-08-26 09:14:08.664000  MROSSI     10.0.7.44       Password non valida

Tre tentativi dello stesso profilo, dalla stessa postazione, a venti secondi l'uno dall'altro:

è una persona che sta sbagliando a digitare. Lo stesso profilo da provenienze diverse, o a intervalli regolari, descrive qualcosa d'altro; ed è la distinzione che REMOTE_ADDRESS rende leggibile e che il conteggio dei tentativi falliti, da solo, non fa.

Per capire cosa è stato tentato dopo un collegamento riuscito, la lettura prosegue su AUDIT_JOURNAL_AF filtrando sullo stesso profilo.

Diritti di lettura

Servono il diritto speciale *AUDIT e i diritti su QAUDJRN e sui suoi ricevitori.

La restrizione ha una motivazione sostanziale oltre che formale: il giornale contiene l'elenco dei profili attivi, le fasce orarie in cui operano e gli oggetti che utilizzano. È un profilo dell'organizzazione, e va protetto con lo stesso criterio dei dati che documenta.

Su quali versioni funziona

CHGSECAUD e QAUDJRN esistono da sempre. Le funzioni SYSTOOLS.AUDIT_JOURNAL_xx sono arrivate con IBM i 7.4 TR4 e 7.3 TR10 — le prime quattro, AF, CA, OW, PW — e sono state estese con 7.4 TR5 e 7.3 TR11, che ha aggiunto fra le altre CD, CO, CP, DO, EV, GR e SV.

Su rilasci precedenti restano DSPJRN su QAUDJRN con OUTFILE e QSYS2.DISPLAY_JOURNAL.

Fonti

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati