Anda di halaman 1dari 13

Gabriele Orlandi

BASI DI DATI
Database

Informatica
Dispense
INTRODUZIONE

Una base di dati è una collezione di dati (fatti noti) che ha le seguenti proprietà:
- rappresenta un aspetto del mondo reale (Universo del Discorso);
- i dati contenuti sono logicamente correlati e consistenti, e non sono una raccolta casuale;
- è costruita e popolata per una scopo;
- le basi di dati possono essere di qualsiasi dimensione e avere diversa complessità

informazione e dato
L’informazione è tutto ciò che produce variazioni del patrimonio conoscitivo di un soggetto.
Il dato è la registrazione della descrizione di una caratteristica della realtà.
ES:
dato: “G24”
informazione: “in G24 si terrà la lezione”
contesto interpretativo:
per trasformare un dato in un informazione bisogna dargli un contesto interpretativo.

Transazione: è un programma che esegue uno o più accessi alla base di dati per leggere e/o modificare.
Query: è l’interrogazione che viene fatta alla base di dati per estrarre informazioni.

DBMS
Un sistema di gestione di basi di dati DBMS (Data Base Management System), è un sistema software
specificamente realizzato per supportare la definizione, costruzione, manipolazione e condivisione di BD.
Base di dati significa quindi collezione di dati gestita da un DBMS.
Definizione: specificare i tipi, le strutture e i vincoli dei dati che devono essere memorizzati nella BD;
Costruzione: popolare la BD, memorizzando i dati su un supporto di memorizzazione gestito dal DBMS;
Manipolazione: interrogare la BD (reperire dati) e/o aggiornare la BD (aggiungere, modificare, eliminare
dati);
Condivisone: più utenti e programmi applicativi possono accedere contemporaneamente ai dati contenuti
nella base di dati;

Funzionalità dei DBMS


- Accesso efficiente a grandi quantità di dati persistenti; le BD possono avere dimensioni anche molto
elevate (es., gigabyte) e hanno un tempo di vita superiore a quello di esecuzione delle singole
applicazioni;
- Gestione delle transazioni: una base di dati è normalmente condivisa e acceduta
contemporaneamente da molteplici utenti attraverso transazioni.
Il DBMS un controllo della concorrenza, per garantire che transazioni concorrenti operino correttamente
sui dati, senza interferenze reciproche.
Il DBMS garantisce inoltre funzionalità di salvataggio e ripristino (backup e recovery) dei dati contenuti
nella base di dati, per garantire che non ci siano perdite di dati anche in caso di guasti e
malfunzionamenti hw/sw durante l’esecuzione di transazioni.
- Gestione delle interrogazioni: Al fine ricostruire l’informazione completa in risposta a
un’interrogazione, in generale è necessario collegare dati in file diversi. Il DBMS fornisce funzionalità per
la formulazione di interrogazioni di alto livello in base alle proprietà dei dati e per l’esecuzione efficiente
delle interrogazioni.
- Protezione dei dati: controllo di autorizzazione di accesso ai dati. Il DBMS fornisce funzionalità di
sicurezza e autorizzazione, secondo privilegi specificati e opportune tabelle di autorizzazione.

Catalogo: una BD non contiene solo i dati, ma anche descrizione completa di vincoli, tipi di dati, file,
formati. Queste informazioni sono i metadati e sono contenuti nel catalogo.
La struttura della BD è memorizzata separatamente dai programmi nel catalogo (indipendenza tra
programmi e dati).

Viste multiple: la BD ha molti utenti; ogni utente può chiedere una diversa prospettiva o vista. Una
vista può essere un sottoinsieme della BD oppure un insieme di dati virtuali che sono derivati dai file
memorizzati. Il DMBS offre funzioni per le viste multiple.
Attori di una BD

Amministratore della base di dati (Data Base Administrator), DBA:


– Autorizza l’accesso alla BD
– Coordina e monitorare l’uso della BD
– Manutiene il sistema BD (es., acquisizione di nuove risorse hw/sw)
Progettista della base di dati:
– Individua i dati da memorizzare
– Sceglie le strutture adeguate per la rappresentazione e memorizzazione
– Comunica con gli utenti finali della BD per comprenderne le esigenze (requisiti utente)
Analista:
– Determina le esigenze degli utenti finali e sviluppare le specifiche per le necessarie transazioni di
accesso alla BD (analisti)
Programmatore:
– Realizza, testa, documenta e manutiene i programmi che implementano le specifiche delle transazioni
(programmatori)

Progettazione della BD:


- definizione e analisi dei requisiti
- progettazione concettuale (schema concettuale)
- progettazione logica (schema logico) e modello ER
- progettazione fisica

Modello dei dati

Un modello dei dati è un insieme di costrutti e operazioni che descrivono la struttura della BD. L’uso del
modello permette al DBMS di fare astrazione dei dati, cioè nasconde agli utenti come vengono strutturati
i dati. Il modello si occupa di due aspetti:
- come rappresentare i dati;
- come rappresentare i legami tra i dati.
Per un modello di dati bisogna quindi determinare:
- oggetto
- insieme degli oggetti
- attributi
- associazioni
Es dell’università:
-oggetto= lo studente
-insieme = tutti gli studenti
-attributi = matricola, cognome, nome…
-associazioni = un certo studente segue un certo corso…

Modello relazionale
Un esempio di modello dei dati è il modello relazionale.
È un modello basato su un singolo costrutto, la relazione.
Una relazione si può vedere come un tabella in cui:
- le righe sono i record
- le colonne sono i campi

Terminologia

Schema della base di dati:


Dato un qualsiasi modello dei dati (quindi anche il modello relazionale) prima di definire la base di dati si
crea lo schema della base di dati: esso è la descrizione del contenuto della base di dati; è il primo passo
per creare la base di dati; normalmente non varia nel tempo.

Stato:
Lo stato (insieme delle istanze) della base di dati è l’insieme dei dati in un certo momento.
È quindi variabile nel tempo. Il primo caricamento di dati si chiama stato iniziale.
Livelli di astrazione del DMBS

Una BD può essere vista a 3 diversi livelli di astrazione, e per ogni livello c’è uno schema:
- Schema Logico : descrizione della BD con modello logico (es: relazionale);
- Schema Fisico : descrizione della BD con modello fisico (file, indici…);
- Schema Esterno o Vista : descrizione della BD o di una parte di essa che costituisce la visione
dell’utente.

Queste distinzioni permette all’utente e al programmatore di fare riferimento solo allo schema logico.
Infatti i dati descritti a livello logico sono memorizzati attraverso strutture fisiche, ma non è necessario
conoscerle: ci pensa il DMBS a mantere la corrispondeza tra i 3 schemi (mapping).

Componenti di un DBMS

• Ottimizzatore: seleziona la strategia di accesso ai dati


• Gestore accesso ai dati: esegue la strategia
• Gestore buffer: gestisce gli accessi alle pagine
• Sottosistema di recovery: gestisce i malfunzionamenti
• Sottosistema di controllo della concorrenza: gestisce le interferenze nell’accesso concorrente ai dati.

Linguaggi

DDL (Data Definition Language)


Linguaggio per la definizione di schemi logici, esterni e le autorizzazioni di accesso ai dati.
DML (Data Manipulation Language)
Linguaggio utilizzato per l’interrogazione e l’aggiornamento delle istanze della base di dati.
SQL (Structured Query Language)
Linguaggio testuali interattivo, usato per l’accesso ai dati.

Architetture centralizzate e client-server del DBMS


IL MODELLO RELAZIONALE

Il modello relazionale rappresenta la BD come una collezione di relazioni o una collezione di tabelle.
Quando si pensa ad una relazione come una tabella, ogni riga è una collezione di dati collegati. I nomi
della tabella e delle colonne aiutano a interpretare il significato dei valori delle righe.
Ogni riga è una tupla, il nome della colonna è l’attributo, il nome della tabella è la relazione.
Il tipo di dati di ogni attributo è rappresentato da un dominio di possibili valori, e per ogni dominio si
specifica il tipo di dato e il formato. (ad es la data è un numero e il formato è gg.mm.aa).

Lo schema di relazione R(A1, A2,…,An) è costituito da un nome R e gli attributi Ak.


Si definisce anche il grado (o arità) che è il numero di attributi dello schema.
Lo schema di relazione si riferisce a una relazione, mentre lo schema della BD si riferisce a tutte le
relazioni. L’istanza di una relazione è un insieme di tuple, l’istanza di una BD è un insieme di relazioni.

Una relazione r(t1,t2…tn) ha un nome r e delle tuple tk.


Ogni tupla tk è l’elenco ordinato di valori vk, in cui ogni vk è un valore appartenente al dominio
dell’attributo Ak, oppure assume il valore speciale null.

Ordinamento: non c’è alcuno ordine da rispettare, sia per le tuple che per gli attributi. Quello che conta
è rispettare l’ordine, una volta stabilito.

Null (informazione incompleta): esiste un valore speciale null che può avere diversi significati:
- valore sconosciuto
- valore esistente ma non disponibile
- valore non applicabile per la tupla

Vincoli e chiavi

Ci sono vincoli o restrizioni sui valori che si possono inserire nella BD


- Vincoli di dominio : sono stabiliti dal dominio dell’attributo che va rispettato.
Esistono vari tipi di dati da poter inserire: numeri interi, reali, stringhe, caratteri…).
- Vincoli di unicità : due tuple non possono avere gli stessi valori per ogni attributo (tuple identiche).
- Vincolli di chiave : esiste un sottoinsieme di attributi che serve a identificare univocamente una tupla,
e questo sottoinsieme si chiama superchiave. In realtà all’interno della superchiave è possibile che ci
siano attributi “di troppo” che servono a identificare ulteriormente la tupla: si parla allora di chiave
quando si indica il numero minimo indispensabile di attributi per identificare univocamente una tupla,
perciò la chiave è anche detta superchiave minimale. Il vincolo di chiave consiste nel fatto che due
tuple non possono avere la stessa combinazione di valori all’iterno della chiave o della superchiave.
La condizione ideale è che ci sia un unico attributo che faccia da chiave.
In uno schema di relazione ci possono essere diverse chiavi possibili, che si dicono chiavi candidate. Si
sceglie allora una chiave, detta chiave primaria, per identificare le tuple.
- Vincolo not null : è arbitrario per ogni attributo, obbligatorio per gli attributi della chiave.
- Vincolo d’integrità dell’entità : stabilisce che nessun valore della chiave primaria può essere nullo
perchè serve a identificare le tuple.
- Vincolo d’integrità referenziale : stabilisce che una tupla di una prima relazione che fa da referente
a una seconda relazione deve riferirsi a una tupla esistente della seconda relazione. Da qui nasce il
concetto di chiave esterna.
Si dice chiave esterna FK (foreign key) un insieme di attributi di R1 che si riferiscono a R2:
- gli attributi di FK di R1 hanno gli stessi domini di PK (primary key) di R2;
- un valore di FK1 o è presente di PK2 oppure è nullo.
Se le due precedenti regole sono rispettate allora c’è vincolo d’integrità referenziale da R1 a R2, dove R1
è la relazione referente e R2 quella referenziata.

Forme normali

Tipi di attributi:
- Attributo semplice: a valori atomici (un valore unico e indivisibile)
- Attributo multivalore: valore è un insieme di valori dello stesso dominio
- Attributo strutturato: valore è un insieme di valori che appartengono a domini diversi
Uno schema di relazione R è detto in prima forma normale (1NF) se ogni suo attributo è semplice.
ALGEBRA E CALCOLO RELAZIONALE

L’insieme di operazioni per il modello relazionale è l’algebra relazionale. Il calcolo relazionale specifica le
interrogazioni relazionali.

Operatori unarie

Selezione σ
* Seleziona le righe, quindi le tuple di R. È un filtro che fa partizione orizzontale.

* Si indica σ <condizione selezione > (R)


La condizione di selezione o clausola è un’espressione booleana nella forma:
<nome_attributo> <op di confronto > < costante >
oppure <nome_attributo> <op di confronto > <nome_attributo>
* Operatori di confronto : { =≠<≤≥> }
Diverse clausole possono essere unite in un σ attraverso gli operatori booleani AND, OR, NOT.
È possibile sempre unire una cascata di selezioni in un’unica selezione tramite AND.
* Il grado della relazione risultante è uguale al grado di quella iniziale.
* Vale la proprietà commutativa

Proiezione π
* Seleziona le colonne, quindi gli attributi. È un filtro che fa partizione verticale.
* Si indica π <lista attributi > (R)
* Eliminazione dei duplicati:
facendo proiezione su attributi non chiave, possono presentarsi delle nuove tuple duplicate; la
proiezione prevede l’eliminazione di duplicati.
* Il grado della relazione risultante è minore del grado di quella iniziale.
* Non vale la proprietà commutativa.

Ridenominazione ρ
Operatore che cambia il nome degli attributi nelle interrogazioni (contenuto delle relazioni inalterato).
* Si indica ρ <nuovoNome> ← <nomeAttributo> (R)

Operatori insiemistici

Sono usate per fondere due relazioni diverse. Per poter essere fuse, devono essere compatibili all’unione,
cioè devono avere lo stesso grado e, ad attributi corrispondenti, lo stesso dominio. Per convenzione noi
scegliamo che gli attributi corrispondenti devono anche avere lo stesso nome, per questo si ricorrerà
all’operatore di ridenominazione.

Unione: R U S crea una nuova relazione con tutte le tuple di R e di S.+


Intersezione: R ∩ S crea una nuova relazione con le sole tuple che sono sia in R sia in S.
Differenza: R – S crea una nuova relazione con le tuple che sono R ma non in S.
Unione e intersezioni sono commutativi, non la differenza.

Operatori binari

Prodotto Cartesiano X
Noto anche come Join Incrociato, si applica a 2 relazioni R e S, e produce una relazione finale Q in cui
ogni tupla è combinazione di ogni tupla di R con ogni tupla di S. Per cui data R(a1,a2…an) e
S(b1,b2…bm), diremo che R X S = Q (a1,a2…an,b1,b2…bm). Se grado_R = n e grado_S = m allora
grado_Q = n+m.
Il prodotto cartesiano è poco utile. Correla tuple nel risultato anche se non sono correlate da un punto di
vista semantico. In generale è necessario operare una selezione sul risultato del prodotto cartesiano per
selezionare un sottoinsieme significativo di tuple.
Join
Il join è un prodotto cartesiano seguito da un’operazione di selezione.
Si indica con R <condizione> S

Si chiama Theta Join (θ Join) se la condizione è data da un operatore di confronto.


Se l’operatore di confronto è = allora si chiama Equijoin.
Da notare che in un Equijoin si hanno sempre una o più coppie di attributi con valori identici; per evitare
questa duplicazione si usa il Join Naturale, che si indica con *.

Divisone ÷

Come si vede dalla sequenza, r:s significa prendere tutte le tuple di r contengono tutte le tuple di s, e
creare una nuova relazione che ha solo gli attributi che non si trovano in s.
Ci deve essere compatibilità sugli attributi (C e D in questo caso).

Nell’esempio è bastato cercare tutte le tuple aventi le coppie c1d1 e c2d2.

Una richiesta classica in cui si fa la divisione è “trovare i nomi degli impiegati che lavorano a tutti i
progetti su cui lavora John Smith.
Progettazione concettuale

Dopo l’analisi dei requisiti, si crea uno schema concettuale ER, specificando tipi di entità,
attributi, tipi di associazioni, gerarchie. Le strategie per la produzione dello schema possono
essere:

- top down – si parte da astrazioni di alto livello e si procede con successivi raffinamenti.

- bottom up – si parte da astrazioni di base che descrivono frammenti elementari di realtà e si


procede aggregando tali astrazioni o aggiungendone di nuove.

- inside out - Caso particolare della strategia bottom-up: si individuano inizialmente alcuni
concetti di maggiore rilevanza e da questi si procede rappresentando via via i concetti vicini a
quelli iniziali seguendo i requisiti (procedimento a “macchia d’olio”).

- mixed - Combinazione delle strategie top-down e bottom-up:


• Definizione di uno schema scheletro contenente
a livello astratto i concetti principali
dell’applicazione
• Su ciascuna parte dello schema scheletro si può
procedere applicando o la strategia top-down
oppure quella bottom-up
• Adatta a progetti di una certa complessità e/o
progetti in cui non sono disponibili da subito tutti i
requisiti.
Qualità di uno schema concettuale:

Leggibilità
Uno schema concettuale e’ leggibile quando presenta i
requisiti in maniera facilmente comprensibile
scelta di nomi significativi e adeguati
minimizzazione di intersezioni (elementi con più
legami posizionati centralmente)

Minimalità
Uno schema concettuale e’ minimale quando non
presenta ridondanze (es., presenza di dati derivati),
ovvero le specifiche sui dati sono rappresentate una
volta sola nello schema
si può tollerare la ridondanza come scelta
progettuale ma va documentata (vedi prog. logica)

Completezza
Uno schema concettuale e’ completo quando
descrive tutti i requisiti di interesse e le operazioni
possono essere eseguite a partire dai concetti
contenuti nello schema
tutti i requisiti sono rappresentati da qualche
concetto nello schema
tutti i concetti coinvolti nelle operazioni sono
raggiungibili nello schema

Correttezza
Uno schema concettuale è corretto quando fa un
uso proprio dei costrutti del modello concettuale
utilizzato
errori sintattici
uso non ammesso di costrutti (es., generalizzazione
su associazioni)
errori semantici
uso dei costrutti che non rispetta la loro definizione
(es., associazione per esprimere specializzazione)
Progettazione logica

Dalla progettazione concettuale si passa alla progettazione logica. Le attività compiute sono:
- ristrutturazione dello schema concettuale (ER);
- traduzione nello schema logico (relazionale);
- verifica della ‘normalizzazione’ sullo schema relazionale ottenuto.

1) Ristrutturazione dello schema concettuale (ER)


• Analisi dei dati derivati (ridondanza)
• Eliminazione delle gerarchie di generalizzazione
• Scelta degli identificatori primari
• Eliminazione di attributi multi-valore e composti

2) Traduzione nello schema logico (relazionale)


• Le entità sono tradotte in relazioni definite sui loro stessi attributi
• Le associazioni sono tradotte in relazioni definite sugli identificatori delle entità che
partecipano e sugli (eventuali) attributi propri dell’associazione
• Dagli indentificatori dell’ER derivano i vincoli di chiave
• Si introducono vincoli di integrità referenziale per le relazioni che provengono da associazioni
• Dalle cardinalità degli attributi derivano vincoli di NOT NULL

3) Verifica della ‘normalizzazione’ sullo schema relazionale ottenuto.


NORMALIZZAZIONE

Dipendenza funzionale:
Un attributo B dipende funzionalmente da A se dato un valore di A si deduce un valore di B.
Si indica con A→B.

Dipendenza funzionale transivita:


Dati gli attributi A, B, C, c’è dipendenza transitiva se A→B, B→C, e quindi A→C.

1^ forma normale:
una relazione è in 1FN se tutti gli attributi sono atomici.
2^ forma normale:
una relazione è in 2FN se è in 1FN e se tutti gli attributi non-chiave dipendono funzionalmente
da tutta la chiave (cioè da tutti gli attributi della chiave, e non solo uno).
3^ forma normale:
una relazione è in 3FN se è in 2FN e se tutti gli attributi non-chiave NON dipendendono
transitivamente dalla chiave.
FORMA NORMALE BOYCE-CODD (BCNF)
Una relazione R è in BCNF se per ogni dipendenza A→B l’insieme A contiene una chiave di R

Il procedimento di decomposizione non deve causare perdita di informazioni e deve conservare


le dipendenze.
DECOMPOSIZIONE SENZA PERDITA
Una relazione R si decompone senza perdita se:
- data R con attributi X = X1 U X2, il join di R1 e R2 è uguale a R stessa (cioè senza tuple
spurie).
- l’insieme degli attributi in comune tra R1 e R2 è chiave per almeno una tra R1 e R2.
CONSERVAZIONE DELLE DIPENDENZE
Una relazione si decompone con conservazione delle dipendenze se:
- gli attributi in dipendenza funzionale in R, compaiono insieme in R1 o R2.

Progettazione fisica

Il processo di progettazione fisica e’ molto complesso perché prevede la definizione di


numerosi parametri (e.g., dimensione iniziale dei file, possibilità di espansione, quantità e
dimensione delle aree di transito per scambio di info tra memoria principale e secondaria).
Tali scelte sono connesse con lo specifico DBMS utilizzato e difficilmente generalizzabili.

La BD è memorizzata in file di dati su dispositivi di memoria.


La sua organizzazione può essere primaria o secondaria:
- primaria – le tuple (i record) sono collocate nei file, e sono strutture sequenziali o hash.
- secondarie – vengono aggiunti gli indici.

INDICI

Un indice è una struttura ausiliaria, separata dai file di dati, realizzata per migliorare i tempi di
ricerca (query) dei dati. Se una tabella non ha indici, ogni ricerca obbliga il sistema a leggere
tutti i dati presenti in essa. L'indice consente invece di ridurre l'insieme dei dati da leggere per
completare la ricerca. Gli indici hanno anche degli effetti negativi in quanto rendono più lente
le operazioni di inserimenti e modifica (update), ed aumentano l'uso della memoria di massa.
Un indice si può pensare nella forma <Ki,Pi> dove Ki è il valore dell'attributo chiave e Pi è il
puntatore al record di dati. Generalmente il file indice è ordinato secondo i valori del campo Ki
affinché sia possibile effettuare una ricerca binaria.

Le tipologie di indice sono le seguenti:


• primari: definiti su attributi a valore univoco
• secondari: definiti su attributi che possono avere valori ripetuti
• clustered: definiti sull'attributo, secondo i cui valori il file di dati è ordinato
• unclustered: definiti sull'attributo, secondo i cui valori il file di dati non è ordinato
• densi: Sono gli indici il cui numero di coppie <Ki,Pi> è uguale al numero di valori chiave dei
record
• sparsi: Sono gli indici il cui numero di coppie <Ki,Pi> è inferiore al numero di valori chiave
dei record
• multilivello: hanno la forma di un albero di ricerca, cioè sono indici che puntano ad altri indici
(primo e secondo livello).
Sicurezza

Gli obiettivi di sicurezza su una base di dati sono:


Segretezza: protezione delle informazioni da letture non autorizzate.
Integrità: protezione dei dati da modifiche o cancellazioni non autorizzate.
Disponibilità: garanzia che non si verifichino casi in cui ad utenti legittimi venga negato
l’accesso ai dati.

Tecnica di sicurezza:
Controllo dell’accesso: ci sono meccanismi che, per ogni richiesta di accesso ai dati,
verificano che l’utente sia autorizzato a compiere l’accesso. Il Reference Monitor è un
meccanismo di controllo che ha il compito di stabilire se l’utente può essere autorizzato
(totalmente o parzialmente) a compiere l’accesso.

Politiche:
Le politiche di controllo stabiliscono la limitazione degli accessi, cioè stabiliscono se e come i
soggetti possono accedere a quali dati contenuti nel sistema.
- Need-To-Know (minimo privilegio): molto restrittiva, permette ad ogni utente l’accesso solo
ai dati strettamente necessari per eseguire le proprie attività; offre ottime garanzie di
sicurezza, può portare ad un sistema eccessivamente protetto.
- Maximized Sharing (massima condivisione): consente agli utenti il massimo accesso alle
informazioni nella base di dati, mantenendo comunque informazioni riservate; soddisfa il
massimo numero possibile di richieste di accesso.

Sistemi aperti e chiusi:


Un sistema chiuso implementa la politica del minimo privilegio, un sistema aperto implementa
la politica della massima condivisione.
Nel sistema aperto l’accesso è permesso a meno che non sia esplicitamente negato.
Nel sistema chiuso l’acceso è permesso solo se esplicitamente autorizzato.

Attacco Cavallo di Troia:

Y non ha accesso al file f1, ma vuole acquisirne il contenuto.


Y inserisce un codice nascosto all’interno di P che legge f1 e scrive f2.
Y concede ad X l’autorizzazione a scrivere su f2 (Y è proprietario di f2 e lo può fare).
Quindi: X esegue P e le informazioni contenute in f1 (file che Y non può leggere) sono
trasferite in f2 (file che Y può leggere).

Politiche mandatorie:
Regolano l’accesso ai dati mediante la definizione di classi di sicurezza per i soggetti e gli
oggetti del sistema:
Le classi di sicurezza sono ordinate (es., TS>S>C>U).
La classe di sicurezza assegnata ad un oggetto rappresenta il livello di sensitività dell’oggetto:
maggiore è la classe assegnata ad un oggetto, più ingente sarà il danno derivante dal rilascio
delle informazioni in esso contenute a soggetti non autorizzati.
Con questa politica sono vietati flussi (controllo di flusso) da oggetti ad elevata
classificazione in oggetti a bassa classificazione (per risolvere il Cavallo di Troia). In questo
caso la flessibilità è però ridotta e la circolazione di informazioni tra gli utenti è più difficile.

Politiche discrezionali:
Per contrasto, queste politiche sono più flessibili: Gli utenti possono a loro discrezione
concedere o revocare i diritti di accesso sugli oggetti. Ci sono regole di autorizzazione flessibili
ed adatte a numerosi contesti applicativi. Non c’è controllo di flusso.

Anda mungkin juga menyukai