Created on 24 Sep 2014 ;    Modified on 29 Sep 2016

Mysql: configurare l'accesso al DB da remoto

Questa nota deriva da quanto pubblicato in StackOverflow.

In questo ambito supponiamo di lavorare su un Server MySQL con sistema operativo CentOS.

Per permettere l'accesso da remoto di un DB MySql residente in questa macchina, dobbiamo seguire questi passi.

Mettere in ascolto mysqld sull'indirizzo del server, configurando il file /etc/my.cnf in esso presente. A questo scopo aggiungere in parametro bind-address, che per policy di sicurezza non viene inserito alla prima installazione di MySQL. Ad esempio aggiungendo la seguente linea (dove w.x.y.z è un indirizzo IP o un nome a dominio):

bind-address=w.x.y.z

Creare l'utente che deve accedere sia localmente che da remoto. Ad esempio dando i seguenti comandi da mysql (dopo essersi loggati al server usando il profilo di root):

CREATE USER 'remoteuser'@'localhost' IDENTIFIED BY 'remotepwd';
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'remotepwd';

Dare all'utente che deve accedere, i relativi permessi sui DB. Ad esempio, sempre come root in mysql, qui di seguito diamo i permessi di accesso a tutti i DB:

GRANT ALL ON *.* TO 'remoteuser'@'localhost';
GRANT ALL ON *.* TO 'remoteuser'@'%';

Qui si nota come un utente MySQL sia itentificato da una coppia: utente@host.

Il segno di percentuale indica per qualunque host. E può essere usato come indicatore parziale di un indirizzo IP, o di un nome a dominio.

Quando si fanno queste configurazioni, ricordarsi di controllare che la porta 3306 non sia bloccata dal firewall iptables.

Inoltre, quando si modificano i permessi di accesso utilizzando mysql, prima di lasciare l'applicazione, eseguire il flush dei nuovi permessi.

Infine: riavviare nel server il servizio myslq.

A questo punto saremo in grado di collegarci con il server utilizzando un client. Da questo possiamo utilizzare il comando:

mysql -h w.x.y.z -u remoteuser -p remotepwd

dove w.x.y.z è l'P del server, o il suo nome a dominio.