Configurare MariaDB per l'accesso remoto

I pacchetti di MariaDB legano MariaDB a 127.0.0.1 (l'indirizzo IP loopback) per default come misura di sicurezza usando la direttiva di configurazione "bind-address". I vecchi pacchetti MySQL a volte disabilitavano completamente il networking TCP/IP usando la direttiva "skip-networking". Prima di passare alla configurazione, spieghiamo cosa fanno:

  • skip-networking è abbastanza semlice. Esclude da MariaDB (o MySQL) tutte le opzioni di rete TCP/IP.
  • bind-address richiede qualche informazione in più. Un server in genere ha almeno due interfacce di rete (anche se non è obbligatorio) e forse anche di più. Le due più comuni sono un dispositivo di rete Loopback e una Network Interface Card (NIC) fisica, che permette di comunicare con la rete. MariaDB è legata all'interfaccia loopback per default, perché questo rende impossibile connettersi alla porta TCP da un host remoto (il bind-address deve puntare a un indirizzo IP locale, altrimenti si ottiene un errore fatale e MariaDB non parte). Naturalmente ciò non è desiderabile se si deve usare una porta TCP da un host remoto, perciò occorre rimuovere questa direttiva bind-address (MariaDB supporta solo un bind-address, ma se la direttiva viene omessa il valore predefinito è 0.0.0.0, o :: - tutti gli IP).

Trovare il file dei default

Per permettere a MySQL di ascoltare le connessioni remote, occorre modificare il file dei default.

I percorsi più comuni dove potrebbe trovarsi:

  * /etc/my.cnf                              (*nix/BSD)
  * $MYSQL_HOME/my.cnf                       (*nix/BSD) *Most Notably /etc/mysql/my.cnf
  * SYSCONFDIR/my.cnf                        (*nix/BSD)
  * DATADIR\my.ini                           (Windows)

Modificare il file dei default

Dopo aver trovato il file dei default, lo si apra con un editor di testo e si cerchi di trovare queste righe nella sezione [mysqld]:

 [mysqld]
    ...
    skip-networking
    ...
    bind-address = <some ip-address>
    ...

(Le righe potrebbero non essere in quest'ordine, ma non è importante.)

Una volta trovate, ci si accerti che entrambe siano commentate (cioè che comincino con il carattere hash (#) ), in questo modo:

 [mysqld]
    ...
    #skip-networking
    ...
    #bind-address = <some ip-address>
    ...

(Anche qui, l'ordine non è importante)

Si salvi il file e si riavvii il demone o il servizio mysqld.

Permettere le connessioni dagli host remoti

Ora che l'installazione del server MySQL è configurata per accettare connessioni dagli host remoti, occorre aggiungere un utente a cui sia permesso connettersi da qualcosa di diverso da 'localhost' (gli utenti di MariaDB sono definiti come 'utente'@'host', perciò 'chadmaynard'@'localhost' e 'chadmaynard'@'1.1.1.1' (ma anche 'chadmaynard'@'server.domain.local') sono utenti differenti che possono avere permessi e password completamente diversi.

Per creare un nuovo utente:

  • Loggarsi nel client da riga di comando mysql (o con un client grafico, se si preferisce)
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 5.5.28-MariaDB-mariadb1~lucid mariadb.org binary distribution

Copyright (c) 2000, 2012, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 
  • Se si desidera vedere gli utenti remoti esistenti, eseguire questa istruzione SQL:
MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
+--------+-----------+
| User   | Host      |
+--------+-----------+
| daniel | %         |
| root   | 127.0.0.1 |
| root   | ::1       |
| root   | gandalf   |
+--------+-----------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 

(Con un'installazione appena fatta, normalmente non viene restituita alcuna riga)

Ora occorre prendere delle decisioni. Gli elementi delle istruzioni grant sono i seguenti:

  • elenco dei privilegi garantiti
  • a quali database/tabelle si applicano questi permessi
  • nome utente
  • l'host dal quale si connette l'utente
  • opzionalmente, una password

Di solito si crea un utente "root" che può connettersi da ogni luogo, quindi in questo esempio faremo così, ma per maggior sicurezza creiamo un utente root che può connettersi dagli host della rete locale (LAN), che contiene indirizzi nell'intervallo 192.168.100.0/24. In questo modo si evita di aprire il server MariaDB (o MySQL) a internet: garantire l'accesso a tutti gli host è una cattiva pratica.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

(% è un jolly)

A questo punto abbiamo raggiunto il nostro obiettivo e abbiamo un utente 'root' che può connettersi da ovunque nella LAN 192.168.100.0/24.

Per ulteriori informazioni su come usare GRANT, si veda la pagina GRANT.

Attenzione

  • Se sul sistema è in esecuzione un software firewall (o si trova dietro un hardware firewall o NAT) occorre permettere le connessioni indirizzate alla porta TCP usata da MySQL (per default e quasi sempre 3306).
  • Per annullare questi cambiamenti, basta decommentare la riga bind-address nel file dei default.

La versione iniziale di questo articolo è stata copiata, con permesso, da http://hashmysql.org/wiki/Remote_Clients_Cannot_Connect on 2012-10-30.

Commenti

Sto caricando i commenti......