
In questo ottavo tutorial del nostro percorso dedicato a MySQL da riga di comando, chiudiamo il cerchio sulle competenze fondamentali di un Database Administrator. Fino ad ora abbiamo utilizzato l’utente root, che detiene poteri assoluti sul server. In un ambiente di produzione (e nei progetti web reali), usare root per collegare un’applicazione al database è una pratica altamente insicura.
Oggi impareremo a creare nuovi utenti dedicati e ad assegnare loro solo i permessi strettamente necessari.
1. Creare un Nuovo Utente
Per iniziare, accedi al prompt di MySQL come utente amministratore:
Bash
mysql -u root -p
Per creare un nuovo utente, che chiameremo
app_utente, utilizziamo il comando CREATE USER. Dobbiamo specificare il nome, l’host da cui può connettersi (usiamo localhost se l’applicazione web e il database risiedono sullo stesso server) e la sua password:SQL
CREATE USER 'app_utente'@'localhost' IDENTIFIED BY 'PasswordSicura123!';
Output previsto
Query OK, 0 rows affected (0.01 sec)
L’utente è stato creato ma, al momento, non può fare nulla, nemmeno visualizzare l’elenco dei database presenti.
2. Assegnare Privilegi Specifici (L’istruzione GRANT)
La regola d’oro della sicurezza informatica è il Principio del Privilegio Minimo: assegnare a un utente solo i permessi essenziali per svolgere il proprio lavoro.
Supponiamo di voler concedere ad
app_utente i permessi di eseguire letture, inserimenti, modifiche e cancellazioni, ma esclusivamente sul database ecommerce creato nei tutorial precedenti:SQL
GRANT SELECT, INSERT, UPDATE, DELETE ON ecommerce.* TO 'app_utente'@'localhost';
Output previsto
Query OK, 0 rows affected (0.01 sec)
Analizziamo il comando:
-
GRANT: l’istruzione per concedere i privilegi. -
SELECT, INSERT, UPDATE, DELETE: la lista delle operazioni consentite. -
ON ecommerce.*: indica che i permessi si applicano a tutte le tabelle (*) del databaseecommerce. -
TO 'app_utente'@'localhost': specifica il destinatario.
Se stessi configurando un CMS (come WordPress) che ha bisogno di creare e modificare le proprie tabelle in autonomia, gli assegneresti tutti i privilegi limitati a quel database:
SQL
GRANT ALL PRIVILEGES ON ecommerce.* TO 'app_utente'@'localhost';
3. Rendere Operative le Modifiche (FLUSH PRIVILEGES)
Dopo aver modificato i permessi con i comandi
GRANT, è prassi standard dire a MySQL di ricaricare in memoria la tabella interna delle autorizzazioni per renderle attive immediatamente:SQL
FLUSH PRIVILEGES;
Output previsto
Query OK, 0 rows affected (0.00 sec)
4. Revocare i Privilegi (L’istruzione REVOKE)
Se decidi che un utente non deve più avere la facoltà di cancellare dati, puoi revocare quel singolo permesso senza eliminare l’intero account.
Togliamo il permesso di eseguire
DELETE all’utente appena creato:SQL
REVOKE DELETE ON ecommerce.* FROM 'app_utente'@'localhost';
Output previsto
Query OK, 0 rows affected (0.01 sec)
(Da notare l’uso della particella
FROM invece di TO rispetto al comando GRANT).5. Eliminare un Utente (DROP USER)
Se un collaboratore lascia il progetto o un’applicazione viene dismessa, per ragioni di sicurezza l’utente relativo deve essere cancellato completamente dal server MySQL:
SQL
DROP USER 'app_utente'@'localhost';
Output previsto
Query OK, 0 rows affected (0.01 sec)
Nel prossimo ed ultimo Tutorial 9 daremo uno sguardo all’Analisi avanzata con le Subquery (Query annidate)

Antonio Parisi
Cloud Solution Architect