La versione classica di MySQL Server ha, per evidenti ragioni di sicurezza, una caratteristica molto restrittiva: non accetta connessioni sulla porta 3306 (la porta a cui risponde MySQL) se non da localhost! Questa caratteristica può essere un problema se abbiamo l’esigenza di rendere disponibile il DBMS all’interno di una Rete: il caso tipico è quello di una configurazione su due macchine separate, una per il sito e l’altra per il database.
In una situazione del genere diventa fondamentale configurare MySQL per accettare connessioni remote.
Modificare il file my.cnf
Per consentire a MySQL di accettare connessioni remote sulla porta 3306 è necessario impostare, all’interno del file my.cnf, il parametro bind-address il quale viene utilizzato dal DBMS per accettare o meno i tentativi di connessione effettuati via TCP/IP.
In genere, come detto, quando si installa un server MySQL, esso viene configurato per accettare connessioni esclusivamente dall’IP della macchina ospitante (localhost), per cui la direttiva di riferimento è settata di default in questo modo:
bind-address=127.0.0.1
Come sappiamo l’IP 127.0.0.1 corrisponde, infatti, all’indirizzo convenzionale della macchina locale.
Accettare connessioni da uno specifico IP
Ma se volessimo invece accettare connessioni TCP/IP da un determinato identificatore univoco di Rete, potremmo impostare il bind-address attraverso la seguente specifica, dove "123.123.123.123" non è altro che una stringa d’esempio che sostituisce l’IP desiderato:
bind-address=123.123.123.123
Così facendo il nostro server MySQL accetterà connessioni provenienti dall’IP 123.123.123.123. Ogni altro tentativo di connessione effettuato da un IP differente, ovviamente, verrà rifiutato.
Accettare tutte le connessioni remote
Se poi la nostra intenzione fosse quella di accettare tutte le connessioni lanciate verso il DBMS locale, indipendentemente dal terminale d’invio, allora il bind-address dovrà essere associato al parametro "0.0.0.0" che rappresenta arbitrariamente qualsiasi indirizzo IP;
bind-address=0.0.0.0
Naturalmente, tutte le modifiche al file "my.cnf" cominceranno a diventare operative soltanto dopo che il server MySQL sarà stato riavviato.
Abilitare utenti remoti
Dopo aver effettuato la modifica alla configurazione di MySQL sarà necessario creare un utente in grado di connettersi da remoto al database utilizzando l’istruzione SQL GRANT. Di seguito una query di esempio che suppone l’esistenza di un database "mioDB" ed un utente "mioUSER" (se non avete ancora creato un database ed un utente, dovete farlo preliminarmente).
GRANT ALL privileges ON mioDB.* TO 'mioUSER'@'mioIP' IDENTIFIED BY 'miaPassword';
Si noti che è possibile creare utenti la cui operatività sul DBMS è vincolata all’utilizzo di specifici IP. Qualora si volesse consentire ad un dato utente di accedere indipendentemente dall’utilizzo o meno di un IP Address si userà la seguente sintassi:
GRANT ALL privileges ON mioDB.* TO 'mioUSER'@'%' IDENTIFIED BY 'miaPassword';
Come potete vedere l’indicazione dell’IP è stata sostituita dal simbolo della percentuale (%) che, nello specifico, equivale a "oggi postazione di connessione".
Affinchè le modifiche ai permessi di accesso abbiano effetto sarà necessario lanciare il comando:
FLUSH PRIVILEGES;