Gli sviluppatori di applicazioni potrebbero incontrare difficoltà nella connessione a un database ospitato su un server diverso dal server locale. In questo articolo, risolveremo un errore comune che si verifica quando ci si connette a un database MySQL in remoto dall'esterno della rete o da un altro host.
SQLSTATE[HY000] [1130] Host '172.19.0.11' is not allowed to connect to this MySQL server
si verifica un errore quando la richiesta di connessione viene rifiutata dal server MySQL.
Per abilitare le connessioni remote, dobbiamo eseguire i seguenti passaggi –
- Abilita connessioni remote dalla configurazione
- Crea un nuovo utente e consentigli di connettersi al server del database dall'host specifico (o da tutti gli host)
- Privilegi di risciacquo
Abilita connessioni remote dalla configurazione MySQL
/etc/mysql/my.cnf
o /etc/my.cnf
o /etc/mysql/mysql.conf.d/mysqld.cnf
. La posizione del file di configurazione di MySQL dipende dalla versione di MySQL che stai utilizzando. Controlla tutte queste posizioni per vedere se riesci a trovare il file di configurazione. Unisciti al nostro server Discord e facci sapere se non hai ancora trovato il file di configurazione. Forse possiamo aiutarti.
Una volta trovato il file di configurazione, aprilo e commenta la riga bind-address = 127.0.0.1
.
Basta aggiungere # prima della riga per commentarlo.
# bind-address = 127.0.0.1
Crea nuovo utente MySQL
Accedi a MySQL come root –
sudo mysql
Or
mysql -u root -p
A seconda del metodo selezionato, ti verrà chiesto di inserire la password. sudo
password se accedi con sudo
.
Una volta nella riga di comando di MySQL, crea un nuovo utente –
> CREATE USER 'username'@'ip-address' IDENTIFIED BY 'set-password';
Sostituisci "nome utente ‘ con il nome utente desiderato, ‘imposta-password ' con la password complessa e 'indirizzo IP ' con l'indirizzo IP remoto nel comando precedente. Dovresti vedere il seguente messaggio se il nuovo utente è stato creato –
Query OK, 0 rows affected (0.02 sec)
> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'ip-address';
Sostituisci il nome utente nel comando precedente con il nome utente effettivo e l'indirizzo IP con l'indirizzo IP del computer remoto (host). Al termine, svuota i privilegi per rendere effettive le modifiche.
> FLUSH PRIVILEGES;
Consenti tutte le connessioni remote
Come nel comando precedente, ho chiesto di sostituire l'indirizzo IP con l'indirizzo IP del computer remoto. Saranno consentite solo le connessioni da quel computer remoto. Tuttavia, possiamo anche utilizzare il carattere jolly "%" per consentire tutte le connessioni, indipendentemente dal fatto che provengano dal tuo computer o da quel tizio del seminterrato che ha bisogno di accedere al tuo database per motivi personali. 😉 Dovranno però inserire le credenziali corrette per accedere al database.
> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%';
Consenti connessioni da un intervallo di indirizzi IP
Se i server remoti si trovano sulla stessa rete, i loro indirizzi IP possono essere facilmente autorizzati a consentire connessioni remote senza la necessità di più utenti MySQL.
> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'172.19.0.*';
Nota come l'ultimo ottetto dell'indirizzo IP è stato sostituito con * nel comando sopra. Ciò consente a tutti i server con quell'indirizzo IP di iniziare con 172.19.0.