Per poter creare un nuovo utente in MySQL , oltre all’accesso al relativo database devi disporre anche di permessi di am­mi­ni­stra­to­re o privilegi di su­pe­ru­ten­te suf­fi­cien­ti per creare account utente e gestire le au­to­riz­za­zio­ni. Devi inoltre sapere di quale tipo di accesso necessita il nuovo utente: permessi di lettura, di scrittura o ad­di­rit­tu­ra di am­mi­ni­stra­zio­ne.

Creare un utente MySQL

In­stal­lan­do il sistema di gestione di database, MySQL crea un account root grazie al quale ottieni il pieno controllo dei tuoi database, delle tabelle e degli utenti per gestirli come am­mi­ni­stra­to­re. Se ti serve aiuto per l’in­stal­la­zio­ne, trovi tutte le in­for­ma­zio­ni im­por­tan­ti nel nostro tutorial MySQL.

Con il tuo account root puoi creare altri account utente o nuovi utenti MySQL e assegnare loro le au­to­riz­za­zio­ni. Tieni presente che, per im­po­sta­zio­ne pre­de­fi­ni­ta, sui sistemi Ubuntu con MySQL 5.7 e versioni più recenti l’utente root MySQL è con­fi­gu­ra­to in modo da non au­ten­ti­car­si con una password, ma con il plugin auth_socket. Il nome dell’utente di sistema che chiama il client MySQL deve cor­ri­spon­de­re al nome dell’utente MySQL indicato nel comando. Questo significa che devi anteporre il comando sudo per ottenere l’accesso al tuo account root:

$ sudo mysql
bash

Per creare un nuovo utente in MySQL utilizza il comando CREATE USER. Puoi così creare un utente con un de­ter­mi­na­to nome utente e relativa password:

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
bash

So­sti­tui­sci username con un nome utente a tua scelta. Dopodiché sotto host indica il nome dell’host da cui si col­le­ghe­rà il nuovo utente. Se l’utente deve avere accesso soltanto dal tuo server Ubuntu locale, puoi indicare localhost.

Se­le­zio­nan­do il plugin di au­ten­ti­ca­zio­ne hai a di­spo­si­zio­ne diverse pos­si­bi­li­tà: il plugin auth_socket offre una sicurezza elevata, in quanto l’utente deve inserire una password per accedere al database. Tuttavia, impedisce anche i col­le­ga­men­ti da remoto, con il rischio quindi di com­por­ta­re più lavoro quando con MySQL devono in­te­ra­gi­re programmi esterni. In al­ter­na­ti­va, puoi tra­la­scia­re la parte di comando WITH authentication_plugin per fare in modo che l’utente si au­ten­ti­chi tramite il plugin standard di MySQL caching_sha2_password. In questo caso il comando è:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
bash

Una volta creato un nuovo utente, devi as­se­gnar­gli le au­to­riz­za­zio­ni.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Assegnare permessi utente con il comando MySQL create user

La creazione e l’am­mi­ni­stra­zio­ne dei permessi utente è decisiva per la sicurezza dei dati in MySQL. Il comando generale per assegnare i permessi utente è il seguente:

mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';
bash

Il valore PRIVILEGE determina quali azioni può eseguire l’utente nel database e nella tabella indicati. Puoi so­sti­tui­re questo valore, tra l’altro, con i comandi seguenti:

  • CREATE: consente agli utenti di creare un database o una tabella.
  • SELECT: permette agli utenti di ri­chia­ma­re dati.
  • INSERT: consente agli utenti di ag­giun­ge­re nuove voci nelle tabelle.
  • UPDATE: permette agli utenti di mo­di­fi­ca­re le voci esistenti nelle tabelle.
  • DELETE: consente agli utenti di eliminare voci di tabella.
  • DROP: gli utenti possono eliminare intere tabelle di database.

Puoi anche assegnare al nuovo utente più privilegi in una volta sola, se­pa­ran­do­li con una virgola:

mysql> GRANT SELECT, INSERT, UPDATE ON database.table TO 'username'@'host';
bash

Puoi assegnare le au­to­riz­za­zio­ni per tutti i database o le tabelle anche con un unico comando, inserendo * al posto dei nomi dei database e delle tabelle. Il comando seguente fornisce ad esempio a un utente l’au­to­riz­za­zio­ne di in­ter­ro­ga­re dati in tutti i database e in tutte le tabelle con SELECT, ag­giun­ge­re nuove voci con INSERT e mo­di­fi­ca­re quelle esistenti con UPDATE.

mysql> GRANT SELECT, INSERT, UPDATE ON *.* TO 'username'@'host';
bash

Dopo aver eseguito in MySQL l’ap­pli­ca­zio­ne CREATE USER o GRANT, con il comando FLUSH PRIVILEGES puoi ag­gior­na­re il database per caricare le tabelle delle au­to­riz­za­zio­ni. Così facendo ti assicuri che le nuove au­to­riz­za­zio­ni siano applicate:

mysql> FLUSH PRIVILEGES;
bash

Dovresti comunque concedere agli utenti soltanto le au­to­riz­za­zio­ni di cui hanno ef­fet­ti­va­men­te bisogno. Assegnare a un utente il pieno controllo comporta anche un rischio di sicurezza elevato.

Creare un utente MySQL: rimuovere permessi utente

Per rimuovere permessi utente in MySQL si usa il comando REVOKE. La sintassi è simile al comando GRANT. In questo caso però occorre uti­liz­za­re FROM al posto di TO:

mysql> REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
bash

Per vi­sua­liz­za­re le au­to­riz­za­zio­ni correnti di un utente puoi usare il comando SHOW GRANTS:

mysql> SHOW GRANTS FOR 'username'@'host';
bash

Per eliminare un utente si usa il comando DROP:

mysql> DROP USER 'username'@'localhost';
bash

Presta comunque la massima at­ten­zio­ne quando elimini utenti, in par­ti­co­la­re se si tratta di utenti con privilegi am­mi­ni­stra­ti­vi. As­si­cu­ra­ti di rimuovere l’utente corretto per evitare perdite di dati ac­ci­den­ta­li.

Dopo aver creato un nuovo utente MySQL e avergli concesso i diritti, puoi chiudere il client MySQL:

mysql> exit
bash
Vai al menu prin­ci­pa­le