cerca
ESP - Lezione del 27 germile 216
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Uni.ESP16aprile2008 History

Hide minor edits - Show changes to output

Changed line 66 from:
Per l'inconsistenza, ho due sostanziali soluzioni:
to:
Per l'inconsistenza, ho queste soluzioni:
Added lines 1-105:
(:title ESP - Lezione del 27 germile 216:)
%titolo%'''Lezione del 27 germile 216 (16.4.2008)'''

[[Torna alla pagina di ESP -> ElementiSicurezzaPrivatezza]]

%sottotitolo%'''Politiche amministrative'''

Queste politiche servono per stabilire chi può concedere o revocare autorizzazioni. Nelle mandatorie, c'è 1 amministratore centrale che decide la classe dei '''soggetti''', e la classe degli oggetti dipende da chi la crea. Quindi, solo l'amministratore decide chi può fare cosa.

Ci sono comunque diversi paradigmi di politiche amministrative:
* '''centralizzata''': 1 amministratore
* '''gerarchica''': 1 amministratore, con delega ad altri utenti
* '''cooperativa''': diversi amministratori, e le auth devono essere rilasciate da tutti

Le più usate sono:
* '''ownership''': chi crea un oggetto ne è il proprietario, e dà lui i permessi agli altri su quell'oggetto
* '''decentralizzata''': non vuol dire cooperativa, ma vuol dire che diversi utenti fanno quello che vogliono nelle zone a loro dedicate, delegando etc.

I problemi riguardano soprattutto tenere traccia in modo chiaro di chi può fare che cosa, come gestire le deleghe, e che cosa accade quando un'autorizzazione viene revocata.

Con la '''delega ristretta''', si può decidere se i privilegi vanno dati in blocco, oppure possono essere dati in modo selettivo.

Per quanto riguarda la revoca, è il solito problema: A autorizza B, e B autorizza C. Poi ad A viene tolta dal Grande Capo l'autorizzazione. Che accade a B e C, a cui i poteri sono stati dati da A, il quale ormai non ne ha più?

La soluzione di questo problema dipende da come è organizzato il sistema. Nei '''DBMS''' in generale si sceglie se le revoche vadano a cascata, o no.

!!!DBMS
I DBMS relazionali che usano SQL usano una politica decentralizzata, combinata con il concetto di ownership: chi crea qualcosa, ne è l'admin.

Poi c'è la faccenda del GRANT:
GRANT SELECT ON TABLE brao TO ukulele WITH GRANT OPTION

Si decide cioè che permessi dare, su che oggetti, a chi, e si specifica, con la GRANT OPTION, se quell'utente potrà a sua volta rilasciare quei permessi a qualcun altro.


!!!DAC avanzate
Le DAC viste finora usavano una tripla (U,A,O) = Utente, Azione, Oggetto, ma sono poco espressive.

Quindi, si estende l'idea con una cosa così: (U, A, O, Condizione). La semantica di questa quadrupla è che il privilegio si applica all'utente SSE la condizione è soddisfatta.

Le condizioni possono essere di qualunque tipo: ora del giorno, amicizia con il padrone, il contesto e così via.

!!!Autorizzazioni per gruppi
Quando ci sono tanti utenti, non è molto comodo dover assegnare a ciascuno decine e decine di privilegi.

Si introduce quindi l'astrazione di una '''gerarchia''', definita su soggetti o oggetti o altri componenti, in cui i privilegi in cima alla gerarchia si propagano a tutti i "figli".

Posso anche decidere di non propagare automaticamente i privilegi, oppure subordinare dei privilegi alla presenza di altri privilegi, che magari dovrei ottenere da altri cammini gerarchici.

Ma c'è il problema che è difficile dare privilegi ad un solo utente, cioè tirarlo fuori dalla gerarchia per fargli fare qualcosa di specifico. Per intenderci, è inutile e magari rischioso autorizzare il lavavetri ad entrare nel Sancta Sanctorum, in genere riservato al Grande Capo, solo per pulire la bacheca.

E allora, si introducono delle '''eccezioni''', applicate direttamente ai nodi, che rappresentano, a seconda del tipo di gerarchia, un utente o un oggetto.
Autorizzazione positiva: (Utente, Azione, Oggetto, +)
Autorizzazione negativa: (Utente, Azione, AltroOggetto, -)
dove '''+''' significa il poter fare l'azione, '''-''' no.

Nelle '''politiche aperte''', le autorizzazioni specificano '''negazioni'''.\\
Nelle '''politiche chiuse''', invece, le autorizzazioni specificano '''permessi'''.

In una politica aperta uno può fare quello che gli deriva dalla gerarchia, a meno di eccezioni. Al contrario, in una politica chiusa, uno non può fare niente a meno di eccezioni. Le '''autorizzazioni negative''' permettono di esprimere sia politiche aperte, che chiuse.

Non è tutto rose e fiori. Ci sono dei problemi:
* '''inconsistenza''': se da una parte ad un utente viene un +, e dall'altra un -, chi vince?
* '''non completezza''': ci saranno oggetti senza + né -? Se sì, come mi comporto?

Per l'inconsistenza, ho due sostanziali soluzioni:
* '''Denials take precedence''' = vincono i NO, anche se sono in parità
* '''Most Specific Takes Precedence''' (MSTP) = vince l'autorizzazione più specifica
* '''Most Specific Along A Path Takes Precedence''' (MSAPTP) = si confrontano le più specifiche su ogni percorso di autorizzazione, per vedere chi vince.

Questi sono i modi per risolvere i '''conflitti''' tra autorizzazioni discordanti. Se decido che vincono sempre i + o i - in un conflitto, è semplice. Con le altre tecniche, un po' meno.

!!!MSTP
Devo prendere l'autorizzazione più specifica nella mia gerarchia, ed applicare quella.

Però, se diversi cammini portano allo stesso utente (o oggetto), e al nodo precedente uno dice + e l'altro dice -, chi vince?

(de)Càpita quindi che ci siano conflitti non risolvibili con la MSTP, anche se a prima vista sembra bella.

!!!MSAPTP
Qui devo valutare tutti i percorsi che si dipanano dal mio oggetto (o utente). Per '''ogni''' percorso che risale alla radice, vedo qual'è l'autorizzazione più specifica.

Se tutti sono d'accordo, il conflitto è risolto. Non lo è però quando non tutti i percorsi sono d'accordo, quindi nemmeno MSAPTP è perfetta.

!!!Strong VS Weak
Un altro sistema è quello di dire: ci sono autorizzazioni '''forti''' e autorizzazioni '''deboli''', e le auth forti vincono sempre su quelle deboli.

Nel caso invece di scontro tra due autorizzazioni deboli, si usa la MSAPTP.

Ma nemmeno questa è del tutto efficace:
* ci sono solo 2 livelli di priorità
* le autorizzazioni forti devono essere consistenti, se no non servono a nulla

Il secondo punto significa che se ho una forte contro una debole, so chi vince. Ma se ho una forte contro una forte, e dicono cose diverse, chi vince?

Si obbliga quindi l'amministratore a concedere le autorizzazioni forti in modo che non creino questi problemi di consistenza, ma allora questa tecnica non risolve in modo automatico tutti i conflitti...

!!!Altre politiche
'''Posizionale''': ho una lista ordinata di autorizzazioni. L'ultima data è quella che fa testo.

'''Grantor-Dependent''': dipende da chi mi ha dato l'autorizzazione.

'''Time-Dependent''': la priorità dipende da quando sono state concesse le autorizzazioni.

[[Torna alla pagina di ESP -> ElementiSicurezzaPrivatezza]]