In generale i database custodiscono informazioni di natura
differente e, spesso, di carattere riservato. Il mezzo normalmente utilizzato
nei moderni RDBMS per poter garantire la riservatezza e l'accesso a tali
informazioni nonchè per evitare la loro alterazione accidentale o volontaria
consiste nel ricorso all'uso dei privilegi.
I privilegi sono speciali
diritti concessi ad uno o più utenti che implicano la facoltà di eseguire
determinati comandi o di compiere determinate azioni su specifici oggetti del
database.
MySQL mette a disposizione quattro tipologie di privilegi che si
differenziano a seconda del contesto di validita che assumono:
- privilegi a livello globale: riguardano tutti i database del server e vengono memorizzati nella tabella user;
- privilegi a livello di database: riguardano tutti gli oggetti di un database e sono memorizzati nella tabella db;
- privilegi a livello di tabella: sono relativi ad una tabella di un database e vengono memorizzati nella tabella tables_priv;
- privilegi a livello di colonna: riguardano una singola colonna di una tabella e sono memorizzati nella tabella columns_priv;
I privilegi possono essere concessi e revocati mediante i comandi
grant e revoke. Inoltre l'assegnazione o la revoca possono anche
avvenire inserendo direttamente nelle relative tabelle un record oppure
cancellando un record già esistente.
La differenza fondamentale che
intercorre tra i due tipi di comandi è che nel primo caso l'operazione produce
degli effetti immediati laddove, nel secondo caso, la produzione degli effetti è
subordinata all'esecuzione di un ulteriore comando quale mysqladmin
flush-privileges (oppure mysqladmin reload).
Inoltre è bene ricordare che in MySQL esistono, per comodità di amministrazione, degli appositi privilegi che racchiudono in sè stessi altri privilegi come ad esempio ALL_PRIVILEGES la cui assegnazione implica il riconoscimento all'utente dei diritti di SELECT, INSERT, UPDATE, INDEX, ALTER, CREATE, DROP, DELETE e GRANT. Naturalmente, viste le insidie che si nascondono in una assegnazione così ampia di diritti, specie se combinata con l'operatore asterisco (*), è bene circoscrivere l'uso di tali privilegi ai soli casi strettamente indispensabili adottando nella maggioranza delle ipotesi il principio dei privilegi minori già ricordato.
È bene anche ricordare una altra interessante caratteristica di MySQL che, attraverso il sistema dei privilegi, consente di assegnare agli utenti i seguenti profili di utilizzo:
- numero di interrogazioni sul database per ora;
- numero di aggiornamenti sulle tabelle per ora;
- numero di connessioni per ora;
Sfruttando tale meccanismo risulta possibile circoscrivere i possibili tentativi di abuso delle risorse del database server che possono anche essere sintomo di attacchi tendenti a saturare le capacità di gestione dei dati da parte del sistema (vedi attacchi di tipo DoS).