Press "Enter" to skip to content

mysql create user – creare un utente mysql esterno o locale

Quando occorre gestire un database MySQL su un nostro server, è necessario conoscere bene alcune procedure. Una di queste è la creazione di un nuovo utente. Se abbiamo un hosting condiviso o un server MySQL managed in qualche cloud hosting come Amazon AWS o Google Cloud tutto è gestito da chi ci fornisce il servizio. Se invece abbiamo deciso di gestire noi il nostro server dovremo fare tutto manualmente e con una particolare attenzione alla sicurezza.

Una delle prime operazioni che ci troviamo ad affrontare è la create user. Ma come si fa a creare un utente MySQL? Di solito si trovano informazioni su come creare un utente locale, ma come creare un utente MySQL che possa accedere dall’esterno ad esempio con MySQLWorkbench?

Seguiteci e lo scopriremo insieme.

Indice

Accedere a MySQL dall’esterno

Quando creiamo un server LAMP, o più in generale quando installiamo MySQL, il database viene installato con la configurazione standard. Questa configurazione prevede l’accesso locale tramite localhost, il server sarà quindi in ascolto di connessioni solamente sull’IP interno 127.0.0.1. La configurazione è fatta in questo modo per ragioni di sicurezza (evitare la possibilità di connessioni dall’esterno). Se infatti installiamo sulla stessa macchina sia il database che l’applicazione che lo utilizzerà (ad esempio wordpress), non sarà strettamente necessario che il database sia accessibile dall’esterno.

Se però abbiamo bisogno si accedere dall’esterno, occorrerà come prima cosa cambiare la configurazione del server. Più precisamente dovremo modificare il parametro bind-address che di default mette il server in ascolto sull’ip locale 127.0.0.1, mentre dovremo metterlo in ascolto anche sull’ip pubblico del nostro server.

Per prima cosa dovremo accedere al terminale del nostro server, fisicamente o tramite ssh.

Una volta acceduto al terminale dovremo editare il file di configurazione di MySQL che si dovrebbe trovare in uno di questi due percorsi a seconda della versione di MySQL:

MySQL 5.5
/etc/mysql/my.cnf
MySQL 5.6
/etc/mysql/conf.d/mysql.cnf
MySQL 5.7
/etc/mysql/mysql.conf.d/mysqld.cnf

Da notare che nella versione 5.7, tutti e tre i file sono presenti, ma il primo è solamente un file che include le directory dove si trovano gli altri due, mentre il secondo è vuoto. Solamente nel terzo si può trovare la configurazione di MySQL con il parametro bind-address.

il parametro bind-address nella configurazione di MySQL
il parametro bind-address nella configurazione di MySQL

Per questo parametro abbiamo sostanzialmente tre diverse opzioni:

  • Impostare l’indirizzo ip 127.0.0.1 per permettere solamente connessioni interne al server.
  • Permettere connessioni da qualsiasi rete, interna, locale o pubblica impostando 0.0.0.0
  • Legare l’istanza di MySQL ad un singolo indirizzo ip del nostro server per fare in modo che vengano accettate solamente connessioni effettuate su quell’indirizzo.

Per rendere accessibile il nostro server dall’esterno dovremo utilizzare una delle ultime due opzioni. Come sempre in sicurezza informatica, più siamo restrittivi e più siamo sicuri, è quindi preferibile utilizzare la terza opzione specificando su quale indirizzo ip del nostro server fare il bind di mysql.

Procediamo quindi a fare le necessarie modifiche, salviamo il file e riavviamo il server mysql per caricare la nuova configurazione.

Creare un utente MySQL

Quando creiamo un utente in MySQL, dobbiamo definire anche la provenienza di questo utente. MySQL tratta infatti diversamente gli utenti in base alla loro provenienza, fornendo la possibilità di personalizzare i permessi per utenti locali o remoti.

Questa caratteristica di MySQL ci porterà quindi ad avere due diversi utenti, volendo anche con lo stesso nome, nel caso in cui volessimo rendere il database accessibile sia in locale che in remoto.

Per creare un utente MySQL accessibile in locale (tramite l’interfaccia localhost 127.0.0.1) la sintassi sarà la seguente:

CREATE USER 'informaticappunti'@'localhost' IDENTIFIED BY 'passwordSicura';

Per creare invece un utenti MySQL accessibile dall’esterno, dovremo sostituire localhost con la wildcard %

CREATE USER 'informaticappunti'@'%' IDENTIFIED BY 'passwordSicura';

La wildcard può essere sostituita da un indirizzo ip se ad esempio ci colleghiamo da un indirizzo statico e vogliamo che vengano accettate connessioni solamente dal nostro ip.

Se abbiamo eseguito entrambi i comandi, a questo punto dovremmo avere aggiunto entrambi gli utenti, uno che identifica le connessioni locali e uno quelle remote. Possiamo verificare lanciando la query:

SELECT User, Host FROM mysql.user
Lista utenti mysql
Lista utenti mysql

Come possiamo notare, saranno presenti due diversi utenti con lo stesso nome, uno con Host “localhost” e l’altro con host “%”.

Assegnare i permessi agli utenti MySQL

A questo punto, nella maggior parte dei casi, il passo successivo è quello di assegnare i “GRANT”, ovvero i permessi da attribuire al nuovo utente.

Se abbiamo creato i due utenti per localhost e % come nell’esempio precedente, anche in questo passaggio dovremo assegnare i permessi ad entrambi gli utenti indipendentemente. Potremmo ad esempio assegnare un set di permessi all’utente che accede tramite localhost e un diverso set, magari più restrittivo, all’utente che accede da remoto.

Nel nostro caso assegneremo tutti i permessi su tutti i database ad entrambi gli utenti. In alternativa potremmo ad esempio assegnare tutti i permessi all’utente localhost in modo da far funzionare la nostra applicazione installata in locale, e dare la sola lettura all’utente proveniente dall’esterno. Questa soluzione ci consentirebbe di poter visualizzare il database in remoto, ma di essere protetti da eventuali accessi indesiderati che non sarebbero in grado di modificare e alterare i contenuti.

Per dare tutti i permessi su tutti i database ad entrambi gli utenti dovremo usare i comandi:

GRANT ALL ON *.* TO 'informaticappunti'@'localhost';
GRANT ALL ON *.* TO 'indormaticappunti'@'%';
FLUSH PRIVILEGES;

L’ultima istruzione serve a comunicare al server di ricaricare le tabelle dei grant per rendere effettive le modifiche apportate.

Nelle vecchie versioni di MySQL era possibile fare la creazione di un utente e la grant con un singolo comando. Questo non è più possibile e quindi è necessario prima creare l’utente e poi assegnargli i permessi desiderati.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *