Tutorial > Come gestire utenti e permessi con MySQL

Come gestire utenti e permessi con MySQL

Pubblicato il: 23 aprile 2020

MySQL Ubuntu

Introduzione

MySQL è uno dei sistemi open-source per la gestione di database relazionali più utilizzati al mondo, tramite il quale puoi creare database, salvare e leggere i dati contenuti al loro interno.

Dopo aver installato MySQL sul tuo server, viene creato un utente amministratore che ha pieno controllo su tutti i database presenti sul sistema. Per questioni di sicurezza è pertanto raccomandato creare diverse tipologie di utenti MySQL con più o meno privilegi in maniera tale da limitare i loro permessi ed evitare che vengano apportate modifiche non autorizzate ai database.

In questo tutorial, dopo aver mostrato come installare MySQL sul tuo server, qualora non fosse già installato, viene spiegato come creare nuovi utenti MySQL e come garantirgli i permessi, mediante comandi grant e revoke, sui database o solo su alcune loro tabelle.

Per iniziare dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Installazione di MySQL

Qualora non avessi ancora installato MySQL sul tuo server, puoi seguire i passaggi contenuti in questa sezione per installarlo e metterlo in sicurezza su Linux Ubuntu 18.04. Se invece MySQL risulta già installato sul tuo server puoi passare direttamente al paragrafo successivo della guida.

Per accertarti di scaricare la versione più aggiornata di MySQL aggiorna prima i repository della tua distribuzione Linux. Se hai già lanciato in precedenza questo comando, allora omettere questo passaggio.

$ sudo apt update

Ora puoi procedere con l'installazione di MySQL:

$ sudo apt install mysql-server

Per verificare che l'installazione sia andata a buon fine, verifica la versione di MySQL:

$ sudo mysqld --version

Se la procedura é stata eseguita correttamente verrà stampata a schermo la versione di MySQL installata.

Procedi con la messa in sicurezza di MySQL eseguendo uno script incluso con MySQL che aumenterà la sicurezza e limiterà l'accesso ai tuoi database:

$ sudo mysql_secure_installation

A questo punto inizierà una procedura guidata che ti permetterà di configurare il livello di sicurezza di MySQL.

Per prima cosa ti verrà chiesto se vuoi abilitare il sistema di validazione delle password: se abiliti questo sistema quando imposterai una password per un utente questa sarà valutata e se non rispetterà i criteri minimi di sicurezza verrà rifiutata con un errore.

In seguito ti verrà chiesto se vuoi cambiare la password di root con una di tua preferenza. Se abiliti il sistema di validazione delle password dovrai inserire una password che rispetti i criteri di sicurezza.

Infine dovrai scegliere se rimuovere gli utenti anonimi, database di test e se vorrai disabilitare il login remoto con l'utente root: consigliamo di confermare tutte queste modifiche per avere un livello di sicurezza accettabile.

A questo punto conferma l'aggiornamento della tabella dei permessi per applicare i nuovi criteri di sicurezza.

Per verificare il funzionamento di MySQL prova ad autenticarti con il seguente comando:

$ sudo mysql

Se l'installazione e la configurazione di MySQL è andata a buon fine, ti troverai nella shell di MySQL.

Se vuoi uscire dalla console di MySQL puoi digitare:

mysql > exit;

Creazione nuovo utente MySQL

La creazione di nuovi utenti può essere eseguita solamente dall’interno della shell di MySQL.

Effettua il login con le tue credenziali digitando:

mysql

A questo punto puoi partire con la creazione del nuovo utente, digitando:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

N.B. Sostituisci ‘username’ e ‘password’ rispettivamente con il nome utente e la password che l’utente utilizzerà per accedere al server MySQL.

Creazione utente MySQL

Assegnazione e Revoca dei permessi su MySQL

Al momento attuale l’utente MySQL è stato creato, ma non ha alcun privilegio di accesso e di modifica ai database. Per assegnargli i permessi dobbiamo specificare con quali database e con quali tabelle l'utente può interfacciarsi.

La sintassi del comando è la seguente:

GRANT ALL PRIVILEGES ON *.* TO ‘username’@'localhost';

N.B. il primo asterisco occupa il campo indicante il database, mentre il secondo asterisco occupa il campo indicante le tabelle del database.

Nel caso del suddetto comando, si sta concedendo l’accesso a tutti i database e le relative tabelle.

Se invece nel comando ci fosse scritto "db_users.*" si starebbe concedendo l’accesso completo al solo database chiamato ‘db_user’. Analogamente, se ci fosse scritto “db_name.users” si starebbe concedendo l’accesso alla sola tabella “users” del database “db_users”.

Terminata questa operazione, bisogna effettuare un aggiornamento interno dei privilegi. Lo si può effettuare mediante il seguente comando:

FLUSH PRIVILEGES;

Gestione privilegi MySQL

Con l’istruzione precedente sono stati garantiti tutti i permessi al nuovo utente. Tuttavia è possibile specificare il tipo di permessi che quest’ultimo può avere.

  • ALL PRIVILEGES: consente l'accesso completo al database (o come indicato nel comando precedente, all’intero MySQL Server);
  • CREATE: consente all’utente di creare nuovi database e tabelle;
  • DROP: consente all’utente di cancellare database e tabelle;
  • DELETE: consente all’utente di cancellare record dalle tabelle;
  • INSERT: consente all’utente di inserire record nelle tabelle;
  • SELECT: consente all’utente di interrogare i database per leggerne il contenuto;
  • UPDATE: consente all’utente di modificare i record presenti nelle tabelle;
  • GRANT OPTION: consente all’utente di aggiungere o rimuovere privilegi ad altri utenti.

Ricapitolando, la concessione di permessi a un utente avviene mediante il comando GRANT che rispetta la seguente sintassi:

GRANT permission ON database.table TO ‘username’ @'localhost’;

Laddove:

  • permission: indica il tipo di permesso che si vuole garantire all’utente (scegliendo tra quelli elencati in precedenza);
  • database: indica il database sul quale l’utente potrà agire;
  • table: indica la tabella del database sul quale l’utente potrà agire;
  • username: è il nome dell’utente al quale si vuole concedere il permesso.

Puoi anche scegliere di revocare determinati permessi a uno specifico utente, mediante il comando REVOKE:

REVOKE permission ON database.table FROM ‘username’ @‘localhost’;

Eliminazione di un utente MySQL

Qualora si voglia eliminare un utente per fare in modo che questo non possa più effettuare accesso al database MySQL, ci si affida al comando DROP USER:

DROP USER ‘username’ @‘localhost’;

Per verificare che l’utente non abbia più i permessi per effettuare l'accesso, puoi testare la connessione a MySQL mediante il comando:

mysql -u ‘username’ -p

Laddove ‘username’ è appunto il nome dell’utente precedentemente eliminato.

Accesso utente MySQL

Conclusione

In questo tutorial, dopo aver mostrato come installare MySQL sul tuo server Ubuntu 18.04, sono state illustrate le modalità di creazione ed eliminazione degli utenti MySQL che possano accedere ai database e alle tabelle con i diversi privilegi di lettura e scrittura.

Ricordati che, qualora non fossi in possesso di un backup, ogni azione di modifica sui database è irreversibile. Presta quindi molta attenzione ai tipi di permessi che fornisci, mediante i comandi grant e revoke, a ciascun utente che sarà in grado di accedere al tuo MySQL Server.