MySQL dispone di una gestione dei permessi di accesso molto avanzata e facilmente gestibile.
In moltissimi casi chi sviluppa su mySQL non gestisce i permessi in quanto è normalmente compito del sistemista o DBA (Database Administrator), però ritengo sia fondamentale capire come funzionano i permessi su mySQL perchè questa conoscenza aiuta a individuare molto rapidamente eventuali problematiche che dovessero insorgere.
Come è facile intuire dai nomi stessi GRANT concede privilegi, REVOKE li elimina.
CONCESSIONE PERMESSI CON GRANT
Esempio di sintassi per GRANT:
GRANT ON database.tabella/e TO user@host;
Analizzando nel dettaglio la sintassi di GRANT possiamo dire che con intendiamo i permessi di SELECT, INSERT, UPDATE ecc... successivamente vi verrà proposta una semplice tabellina dove vengono sintetizzati tutti i tipi di permessi assegnabili agli utenti.
Dopo “ON” bisogna dire per quale database ed eventualmente quale/i tabella/e vale il GRANT che si vuole eseguire sul DB.
Se si volesse assegnare dei permessi su tutte le tabelle di un database “rubrica” il comando da eseguire sarà: ON rubrica.*
Da ciò è facile dedurre che per * si intende tutte le tabelle.
A seguito del comando TO devono essere passati al comando GRANT l'utente che si vuole creare e l'host dal quale è possibile accedere al database server.
Se si desidera assegnare ad un utente certi permessi da parte di tutti gli host possibili bisogna utilizzare il carattere jolly: %
Un'altra opzione FONDAMENTALE per rendere sicuro il database server è di assegnare anche una password per l'utente, semplicemente aggiungendo:
IDENTIFIED BY 'password';
Come regola di massima la tendenza da parte di un sistemista che amministra una base dati mySQL è quella di restringere al massimo i permessi sul proprio DB e di concedere privilegi solo in caso di reale necessità.
In fase di sviluppo normalmente un programmatore non si interessa di queste problematiche ma ciò è sbagliato perchè si rischia che quando si va in produzione ci siano dei problemi.
REVOCA DI PRIVILEGI TRAMITE REVOKE
Per rimuovere permessi precedentemente assegnati si utilizza il comando REVOKE, il quale ha la stessa identica sintassi di GRANT:
REVOKE ON database.tabella/e TO user@host;
NOTA PER CHI VUOLE APPROFONDIRE
Questi sono i comandi base e più che sufficienti per amministrare gli accessi ad un DB mySQL tramite GRANT e REVOKE, comunque per la documentazione completa vi rimando al sito ufficiale:
http://dev.mysql.com/doc/mysql/en/GRANT.html
AUTORIZZAZIONI ASSEGNABILI CON L'ISTRUZIONE GRANT (Le principali) (da leggere)
PRIVILEGIO DESCRIZIONE
ALL PRIVILEGES Consente all'utente di eseguire TUTTO sulla base dati
FILE Importazione/Esportazione dati da un file su disco
RELOAD Ricaricamente tabelle di GRANT e svuotamento LOG
ALTER Modifica struttura delle tabelle
INDEX Aggiunta e rimozione di indici
SELECT Esecuzione query di estrazione dati
CREATE Consente di creare database, tabelle e indici
INSERT Inserimento nuovi record
DELETE Cancellazione record nelle tabelle
SHUTDOWN Spegnimento servizio mySQL
PROCESS Consente di eseguire “processlist” e “kill” per la gestione dei
thread del server
USAGE Sinonimo di INSERT, UPDATE e DELETE
UPDATE Aggiornamento dati nel DB
DROP Possibilità di eliminazione fisica di tabelle o database
Quando si amministrano i permessi bisogna stare particolarmente attenti a diversi privilegi che devono essere lasciati esclusivamente all'utente amministratore ROOT o ad altri power user assolutamente fidati. I privilegi in questione sono i seguenti:
PERMESSI PERICOLOSI DA ASSEGNARE AD UTENTI NON FIDATI (da leggere con attenzione)
PRIVILEGIO PERICOLO
FILE Consente all'utente di leggere qualunque file leggibile da
qualunque parte del mondo sul proprio server (compresi altri DB
mySQL) importando i dati in una tabella
PROCESS Permette di trovare password e dati importanti soprattutto per la
sicurezza
ALTER Permette di rinominare tabelle e di bypassare quindi i controlli di
accesso
SHUTDOWN Consente lo spegnimento! del server