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.
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
*ALLOBJe*SECADM, oppure l'autorizzazione alla funzioneQIBM_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.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati