# Creare un utente in MySQL con CREATE USER

Per poter creare un nuovo utente in [MySQL](https://www.ionos.it/digitalguide/server/know-how/cose-mysql/) , oltre all’accesso al relativo [database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/database/) devi disporre anche di permessi di amministratore o privilegi di superutente sufficienti per creare account utente e gestire le autorizzazioni. Devi inoltre sapere di quale tipo di accesso necessita il nuovo utente: permessi di lettura, di scrittura o addirittura di amministrazione.

## Creare un utente MySQL

Installando il [sistema di gestione di database](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/sistema-di-gestione-di-base-di-dati-dbms/), MySQL crea un **account root** grazie al quale ottieni il pieno controllo dei tuoi database, delle tabelle e degli utenti per gestirli come amministratore. Se ti serve aiuto per l’installazione, trovi tutte le informazioni importanti nel nostro [tutorial MySQL](https://www.ionos.it/digitalguide/server/know-how/imparare-a-utilizzare-mysql-guida-per-principianti/).

Con il tuo account root puoi creare altri account utente o nuovi utenti MySQL e assegnare loro le autorizzazioni. Tieni presente che, per impostazione predefinita, sui sistemi Ubuntu con MySQL 5.7 e versioni più recenti l’utente root MySQL è configurato in modo da non autenticarsi con una password, ma con il plugin `auth_socket`. Il nome dell’utente di sistema che chiama il client MySQL deve corrispondere al nome dell’utente MySQL indicato nel comando. Questo significa che devi anteporre il comando `sudo` per ottenere l’accesso al tuo account root:

```bash
$ sudo mysql
```

Per creare un nuovo utente in MySQL utilizza il comando `CREATE USER`. Puoi così creare un utente con un determinato nome utente e relativa password:

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

Sostituisci `username` con un nome utente a tua scelta. Dopodiché sotto `host` indica il nome dell’host da cui si collegherà il nuovo utente. Se l’utente deve avere accesso soltanto dal tuo [server Ubuntu](https://www.ionos.it/digitalguide/server/configurazione/ubuntu-server/) locale, puoi indicare `localhost`.

Selezionando il **plugin di autenticazione** hai a disposizione diverse possibilità: il plugin `auth_socket` offre una sicurezza elevata, in quanto l’utente deve inserire una password per accedere al database. Tuttavia, impedisce anche i collegamenti da remoto, con il rischio quindi di comportare più lavoro quando con MySQL devono interagire programmi esterni. In alternativa, puoi tralasciare la parte di comando `WITH authentication_plugin` per fare in modo che l’utente si autentichi tramite il plugin standard di MySQL `caching_sha2_password`. In questo caso il comando è:

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

Una volta creato un nuovo utente, devi assegnargli le autorizzazioni.

## Assegnare permessi utente con il comando MySQL create user

La creazione e l’amministrazione dei permessi utente è decisiva per la sicurezza dei dati in MySQL. Il comando generale per assegnare i permessi utente è il seguente:

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

Il valore `PRIVILEGE` determina quali azioni può eseguire l’utente nel database e nella tabella indicati. Puoi sostituire 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 richiamare dati.
- `INSERT`: consente agli utenti di aggiungere nuove voci nelle tabelle.
- `UPDATE`: permette agli utenti di modificare 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, separandoli con una virgola:

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

Puoi assegnare le **autorizzazioni 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’autorizzazione di interrogare dati in tutti i database e in tutte le tabelle con `SELECT`, aggiungere nuove voci con `INSERT` e modificare quelle esistenti con `UPDATE`.

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

Dopo aver eseguito in MySQL l’applicazione `CREATE USER` o `GRANT`, con il comando `FLUSH PRIVILEGES` puoi aggiornare il database per caricare le tabelle delle autorizzazioni. Così facendo ti assicuri che le nuove autorizzazioni siano applicate:

```bash
mysql> FLUSH PRIVILEGES;
```

Dovresti comunque concedere agli utenti soltanto le autorizzazioni di cui hanno effettivamente 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 utilizzare `FROM` al posto di `TO`:

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

Per visualizzare le autorizzazioni correnti di un utente puoi usare il comando `SHOW GRANTS`:

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

Per eliminare un utente si usa il comando `DROP`:

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

Presta comunque la massima attenzione quando elimini utenti, in particolare se si tratta di utenti con privilegi amministrativi. Assicurati di rimuovere l’utente corretto per evitare perdite di dati accidentali.

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

```bash
mysql> exit
```


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/mysql-create-user/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/mysql-create-user/) for AI/LLM consumption.