Misurare *PUBLIC prima di restringerlo

Rivista il

Accedi per salvare

Il diritto *PUBLIC di un oggetto, se non impostato esplicitamente, viene ereditato dalla libreria e in ultima istanza dal valore di sistema QCRTAUT, il cui valore predefinito è *CHANGE.

La conseguenza è che su un sistema mai revisionato il diritto pubblico è tipicamente più ampio di quanto risulti da qualsiasi decisione documentata. Il perimetro non è stato ampliato: non è mai stato ristretto.

Il diritto pubblico di un oggetto, se non impostato, viene ereditato dalla libreria e in ultima istanza da QCRTAUT, che di serie vale *CHANGE.

Questo perimetro è indipendente dalla sicurezza a menu, che vincola l'accesso interattivo 5250 e non le interfacce che raggiungono il database direttamente: su cui si può intervenire dagli exit point.

Fotografare la situazione

La vista è QSYS2.OBJECT_PRIVILEGES, che restituisce una riga per ogni utente autorizzato a un oggetto: le stesse informazioni di DSPOBJAUT, in forma interrogabile.

La distribuzione per libreria, da eseguire per prima perché è aggregata e restituisce poche righe:

SELECT OBJECT_AUTHORITY, COUNT(*) AS QUANTI
  FROM QSYS2.OBJECT_PRIVILEGES
 WHERE SYSTEM_OBJECT_SCHEMA = 'PRODLIB'
   AND AUTHORIZATION_NAME = '*PUBLIC'
 GROUP BY OBJECT_AUTHORITY
 ORDER BY QUANTI DESC;

L'elenco degli oggetti non esclusi, da eseguire dopo aver visto i numeri:

SELECT SYSTEM_OBJECT_NAME, OBJECT_TYPE, OBJECT_AUTHORITY
  FROM QSYS2.OBJECT_PRIVILEGES
 WHERE SYSTEM_OBJECT_SCHEMA = 'PRODLIB'
   AND AUTHORIZATION_NAME = '*PUBLIC'
   AND OBJECT_AUTHORITY <> '*EXCLUDE'
 ORDER BY SYSTEM_OBJECT_NAME;

Misurare l'uso reale

Il diritto concesso non indica il diritto utilizzato. Senza quel dato ogni restrizione è un'ipotesi, e la verifica avviene in produzione.

La raccolta delle autorizzazioni registra ogni controllo di diritto effettivamente eseguito, con il diritto richiesto e quello che sarebbe stato sufficiente. Si attiva per profilo:

STRAUTCOL TYPE(*USRPRF) USRPRF(MARIO) LIBINF((PRODLIB))

Si ferma con ENDAUTCOL. IBM avverte che la raccolta vale per il profilo effettivo del thread, e che su un profilo usato come gruppo non raccoglie niente. Va lasciata attiva per un ciclo di lavoro completo, comprensivo delle elaborazioni periodiche: una chiusura contabile utilizza oggetti che nel resto del mese non vengono aperti. Poi:

SELECT SYSTEM_OBJECT_SCHEMA, SYSTEM_OBJECT_NAME, OBJECT_TYPE,
       CURRENT_AUTHORITY, REQUIRED_AUTHORITY
  FROM QSYS2.AUTHORITY_COLLECTION
 WHERE AUTHORIZATION_NAME = 'MARIO';

CURRENT_AUTHORITY è il diritto che il profilo aveva in quel momento, REQUIRED_AUTHORITY quello minimo che l'operazione avrebbe richiesto. Le due colonne affiancate quantificano il margine di restrizione su base documentale, senza doverlo ricostruire altrove.

Serve un diritto elevato per leggerla. La vista richiede *ALLOBJ e *SECADM, oppure l'autorizzazione alla funzione QIBM_DB_SECADM. Senza, risponde [SQL0443] *ALLOBJ AND *SECADM AUTHORITY, OR QIBM_DB_SECADM FUNCTION USAGE IS REQUIRED: che è un errore di diritti, non di sintassi né di oggetto mancante.

Esempio: leggere il margine di restrizione

I valori che seguono sono illustrativi, servono a mostrare come si legge il confronto.

Distribuzione del diritto pubblico su una libreria, dalla prima query:

OBJECT_AUTHORITY   QUANTI
*CHANGE               418
*USE                   36
*EXCLUDE                7

Quattrocentodiciotto oggetti modificabili da chiunque. Il dato da solo non dice quanti lo siano per necessità.

Dopo un mese di raccolta sullo stesso perimetro:

SYSTEM_OBJECT_NAME  OBJECT_TYPE  CURRENT_AUTHORITY  REQUIRED_AUTHORITY
ARTICOLI            *FILE        *CHANGE            *USE
CLIENTI             *FILE        *CHANGE            *USE
MOVMAG              *FILE        *CHANGE            *CHANGE
LISTINI             *FILE        *CHANGE            *USE

Delle quattro tabelle effettivamente utilizzate dal profilo, tre richiedono solo *USE: la lettura. Una sola scrive. Il diritto pubblico *CHANGE su ARTICOLI, CLIENTI e LISTINI eccede l'uso rilevato e può scendere a *USE senza che nessuna operazione osservata ne risenta.

Gli oggetti che non compaiono affatto nella raccolta sono la seconda informazione utile: nel periodo osservato quel profilo non li ha aperti. Non è una prova che non servano mai (un programma annuale non compare in un mese) ma circoscrive l'analisi a un elenco molto più corto di quello di partenza.

Sequenza di intervento

Prima il diritto predefinito delle librerie. CHGLIB ... CRTAUT(...) cambia il diritto che prenderanno gli oggetti creati da quel momento nella libreria, e non tocca quelli che ci sono: interrompe l'ampliamento progressivo del perimetro. Non si fa cambiando QCRTAUT: IBM avverte che diverse librerie di sistema, QSYS compresa, hanno CRTAUT(*SYSVAL), e che un valore diverso da *CHANGE può impedire il collegamento dai dispositivi nuovi o creati in automatico.

Poi gli oggetti con contenuto qualificato. Retribuzioni, dati personali, contabilità. Un insieme ristretto di oggetti trattati correttamente ha un valore superiore a un intervento esteso condotto senza dati sull'uso.

Liste di autorizzazione invece di diritti individuali. Un oggetto collegato a una lista si amministra modificando la lista; un insieme ampio di diritti individuali non è amministrabile in modo verificabile.

Diritto adottato (USRPRF(*OWNER)) per le operazioni che richiedono più diritto di quello assegnato all'utente. È il meccanismo previsto per non dover ampliare il diritto pubblico dell'oggetto.

Il presupposto: livello di sicurezza

Quanto sopra presuppone QSECURITY a 40 o 50. Al livello 30 il controllo dei diritti c'è, ma secondo la tabella IBM dei livelli un programma che accede agli oggetti con interfacce non supportate ci riesce: l'audit lo registra come voce AF, senza bloccarlo. Dal 40 l'operazione fallisce.

Da IBM i 7.5 il livello 20 non è più impostabile: i sistemi che vi si trovano lo mantengono dopo l'aggiornamento, ma non è più un valore raggiungibile.

Su quali versioni funziona

QSYS2.OBJECT_PRIVILEGES è disponibile da parecchi rilasci. La raccolta delle autorizzazioni per utente è arrivata con IBM i 7.3; quella per oggetti (STRAUTCOL TYPE(*OBJAUTCOL), con le viste AUTHORITY_COLLECTION_LIBRARIES e simili) è nella documentazione di 7.5. QCRTAUT, le liste di autorizzazione e il diritto adottato non hanno vincoli di rilascio.

Fonti

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati