Gestione permessi su MySQL con Grant e Revoke

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

Privacy Policy