Ricerca nel sito web

Come creare un nuovo utente e concedere autorizzazioni in MySQL


introduzione

database open source più popolare al mondo.

Questa guida illustra come creare un nuovo utente MySQL e concedergli le autorizzazioni necessarie per eseguire una serie di azioni.

Prerequisiti

Per seguire questa guida, avrai bisogno di accedere a un database MySQL. Questa guida presuppone che questo database sia installato su un server privato virtuale che esegue Ubuntu 20.04, sebbene i principi che delinea dovrebbero essere applicabili indipendentemente da come accedi al tuo database.

Se non hai accesso a un database MySQL e desideri crearne uno tu stesso, puoi seguire una delle nostre guide su Come installare MySQL. Ancora una volta, indipendentemente dal sistema operativo sottostante del tuo server, i metodi per creare un nuovo utente MySQL e concedergli le autorizzazioni saranno generalmente gli stessi.

In alternativa, potresti creare un database MySQL gestito da un provider di servizi cloud. Per i dettagli su come creare un database gestito da DigitalOcean, consulta la nostra documentazione del prodotto.

Tieni presente che qualsiasi parte dei comandi di esempio che devi modificare o personalizzare verrà evidenziata in questo modo in questa guida.

Creazione di un nuovo utente

Al momento dell'installazione, MySQL crea un account utente root che puoi utilizzare per gestire il tuo database. Questo utente ha privilegi completi sul server MySQL, il che significa che ha il controllo completo su ogni database, tabella, utente e così via. Per questo motivo, è meglio evitare di utilizzare questo account al di fuori delle funzioni amministrative. Questo passaggio illustra come utilizzare l'utente MySQL root per creare un nuovo account utente e concedergli i privilegi.

Nei sistemi Ubuntu che eseguono MySQL 5.7 (e versioni successive), l'utente root MySQL è impostato per autenticarsi utilizzando il plug-in auth_socket per impostazione predefinita anziché con una password. Questo plugin richiede che il nome dell'utente del sistema operativo che richiama il client MySQL corrisponda al nome dell'utente MySQL specificato nel comando. Ciò significa che è necessario far precedere il comando mysql da sudo per invocarlo con i privilegi dell'utente root di Ubuntu al fine di ottenere l'accesso all'utente root di MySQL:

  1. sudo mysql

Nota: se il tuo utente MySQL root è configurato per l'autenticazione con una password, dovrai utilizzare un comando diverso per accedere alla shell MySQL. Quanto segue eseguirà il tuo client MySQL con normali privilegi utente e otterrai privilegi di amministratore all'interno del database solo autenticandoti con la password corretta:

  1. mysql -u root -p

Una volta che hai accesso al prompt di MySQL, puoi creare un nuovo utente con un'istruzione CREATE USER. Questi seguono questa sintassi generale:

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Dopo CREATE USER, specifica un nome utente. Questo è immediatamente seguito da un segno @ e poi dal nome host da cui questo utente si connetterà. Se prevedi di accedere a questo utente solo localmente dal tuo server Ubuntu, puoi specificare localhost. Racchiudere sia il nome utente che l'host tra virgolette singole non è sempre necessario, ma farlo può aiutare a prevenire errori.

Hai diverse opzioni quando si tratta di scegliere il plug-in di autenticazione del tuo utente. Il plugin auth_socket menzionato in precedenza può essere conveniente, in quanto fornisce una sicurezza elevata senza richiedere agli utenti validi di inserire una password per accedere al database. Ma impedisce anche le connessioni remote, il che può complicare le cose quando i programmi esterni devono interagire con MySQL.

In alternativa, puoi tralasciare completamente la porzione WITH authentication_plugin della sintassi per fare in modo che l'utente si autentichi con il plugin predefinito di MySQL, caching_sha2_password. La documentazione di MySQL consiglia questo plug-in agli utenti che desiderano accedere con una password grazie alle sue solide funzionalità di sicurezza.

Esegui il seguente comando per creare un utente che si autentichi con caching_sha2_password. Assicurati di cambiare sammy con il tuo nome utente preferito e password con una password complessa di tua scelta:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Nota: c'è un problema noto con alcune versioni di PHP che causa problemi con caching_sha2_password. Se prevedi di utilizzare questo database con un'applicazione PHP, ad esempio phpMyAdmin, potresti voler creare un utente che si autenticherà con il plug-in mysql_native_password precedente, sebbene ancora sicuro:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Se non sei sicuro, puoi sempre creare un utente che si autentichi con caching_sha2_plugin e poi ALTER successivamente con questo comando:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Dopo aver creato il tuo nuovo utente, puoi concedergli i privilegi appropriati.

Concessione di autorizzazioni utente

La sintassi generale per la concessione dei privilegi utente è la seguente:

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

Il valore PRIVILEGE in questa sintassi di esempio definisce quali azioni l'utente può eseguire sul database specificato e tabella. Puoi concedere più privilegi allo stesso utente in un unico comando separandoli ciascuno con una virgola. Puoi anche concedere privilegi a un utente a livello globale inserendo asterischi (*) al posto del nome del database e della tabella. In SQL, gli asterischi sono caratteri speciali usati per rappresentare \tutti i database o le tabelle.

Per illustrare, il seguente comando concede a un utente i privilegi globali per i database, le tabelle e gli utenti CREATE, ALTER e DROP, nonché il power per INSERT, UPDATE e DELETE dati da qualsiasi tabella sul server. Garantisce inoltre all'utente la possibilità di interrogare i dati con SELECT, creare chiavi esterne con la parola chiave REFERENCES ed eseguire operazioni FLUSH con il RELOAD. Tuttavia, dovresti concedere agli utenti solo le autorizzazioni di cui hanno bisogno, quindi sentiti libero di modificare i privilegi del tuo utente secondo necessità.

Puoi trovare l'elenco completo dei privilegi disponibili nella documentazione ufficiale di MySQL.

Esegui questa istruzione GRANT, sostituendo sammy con il tuo nome utente MySQL, per concedere questi privilegi al tuo utente:

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Nota che questa istruzione include anche WITH GRANT OPTION. Ciò consentirà al tuo utente MySQL di concedere tutte le autorizzazioni che ha ad altri utenti sul sistema.

Avviso: alcuni utenti potrebbero voler concedere al proprio utente MySQL il privilegio ALL PRIVILEGES, che fornirà loro ampi privilegi di superutente simili ai privilegi dell'utente root, in questo modo:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Tali ampi privilegi non dovrebbero essere concessi alla leggera, poiché chiunque abbia accesso a questo utente MySQL avrà il controllo completo su ogni database sul server.

Molte guide suggeriscono di eseguire il comando FLUSH PRIVILEGES subito dopo un'istruzione CREATE USER o GRANT per ricaricare le tabelle di concessione per garantire che i nuovi privilegi sono attuati:

  1. FLUSH PRIVILEGES;

Tuttavia, secondo la documentazione ufficiale di MySQL, quando modifichi indirettamente le tabelle di concessione con un'istruzione di gestione dell'account come GRANT, il database ricaricherà immediatamente le tabelle di concessione in memoria, il che significa che FLUSH PRIVILEGES Il comando non è necessario nel nostro caso. D'altra parte, eseguirlo non avrà alcun effetto negativo sul sistema.

Se devi revocare un'autorizzazione, la struttura è quasi identica a quella per concederla:

  1. REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

Tieni presente che quando revochi i permessi, la sintassi richiede che tu usi FROM, invece di TO che hai usato quando hai concesso i permessi.

Puoi esaminare le autorizzazioni correnti di un utente eseguendo il comando SHOW GRANTS:

  1. SHOW GRANTS FOR 'username'@'host';

Proprio come puoi eliminare i database con DROP, puoi utilizzare DROP per eliminare un utente:

  1. DROP USER 'username'@'localhost';

Dopo aver creato il tuo utente MySQL e avergli concesso i privilegi, puoi uscire dal client MySQL:

  1. exit

In futuro, per accedere come nuovo utente MySQL, utilizzerai un comando come il seguente:

  1. mysql -u sammy -p

Il flag -p farà sì che il client MySQL ti chieda la password del tuo utente MySQL per l'autenticazione.

Conclusione

Seguendo questo tutorial, hai imparato come aggiungere nuovi utenti e concedere loro una varietà di autorizzazioni in un database MySQL. Da qui, potresti continuare a esplorare e sperimentare diverse impostazioni di autorizzazione per il tuo utente MySQL, oppure potresti voler saperne di più su alcune configurazioni MySQL di livello superiore.

Per ulteriori informazioni sulle basi di MySQL, puoi consultare i seguenti tutorial:

  • Come creare e gestire database in MySQL e MariaDB su un server cloud
  • Come configurare la replica in MySQL
  • Come configurare la replica di gruppo MySQL su Ubuntu 20.04