L'host 'xxx.xx.xxx.xxx' non è autorizzato a connettersi a questo server MySQL

Questo dovrebbe essere molto semplice, ma non riesco a farlo funzionare.
Sto solo cercando di connettermi da remoto al mio server MySQL.

connettersi come

mysql -u root -h localhost -p  

funziona bene, ma provando

mysql -u root -h 'any ip address here' -p

fallisce con l'errore

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

Nella tabella mysql.user, c'è esattamente la stessa voce per l'utente 'root' con host 'localhost' come un'altra con host '%'.

Sono al limite e non ho idea di come procedere. Qualsiasi idea è benvenuta.

Soluzione

Forse una precauzione di sicurezza. Potresti provare ad aggiungere un nuovo account di amministratore:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Anche se, come Pascal e altri hanno notato, non è una grande idea avere un utente con questo tipo di accesso aperto a qualsiasi IP. Se avete bisogno di un utente amministrativo, usate root, e lasciatelo su localhost. Per qualsiasi altra azione specificate esattamente i privilegi di cui avete bisogno e limitate l'accessibilità dell'utente come Pascal ha suggerito qui sotto.

Modifica:

Dalle FAQ di MySQL:

Se non riesci a capire perché ottieni Accesso negato, rimuovi dalla tabella utente tabella tutte le voci che hanno Host valori che contengono caratteri jolly (voci che contengono '%' o '_' caratteri). A errore molto comune è quello di inserire una nuova voce con Host='%' e User='qualche_utente', pensando che questo permetta di specificare localhost per connettersi dalla stessa macchina. Il ragione per cui questo non funziona è che i privilegi di default includono una voce con Host='localhost' e User=''. Poiché quella voce ha un Host valore 'localhost' che è più specifico di '%', viene usato in preferenza alla nuova voce quando la connessione da localhost! La procedura corretta procedura è di inserire una seconda voce con Host='localhost' e User='qualche_utente', oppure cancellare la voce con Host='localhost' e User=''. Dopo aver cancellato la voce, ricordatevi di eseguire un FLUSH PRIVILEGES per ricaricare le tabelle dei privilegi. Vedi anche Sezione 5.4.4, "Accesso Controllo, Fase 1: Connessione Verifica".

Commentari (8)

Il messaggio *Host '''xxx.xx.xxx.xxx'' non è permesso connettersi a questo server MySQL è una risposta dal server MySQL al client MySQL. Notate come restituisce l'indirizzo IP e non l'hostname.

Se stai cercando di connetterti con mysql -h -u -p e restituisce questo messaggio con l'indirizzo IP, allora il server MySQL non è in grado di fare un reverse lookup sul client. Questo è critico perché è il modo in cui mappa il client MySQL alle sovvenzioni.

Assicurati di poter fare un nslookupdal server MySQL. Se questo non funziona, allora non c'è nessuna voce nel server DNS. In alternativa, puoi mettere una voce nel file HOSTS del server MySQL (` `

Commentari (1)

Se si modificano le tabelle dei privilegi manualmente (usando INSERT, UPDATE, ecc.), si dovrebbe eseguire un'istruzione FLUSH PRIVILEGES per dire al server di ricaricare le tabelle di concessione.

PS: non raccomanderei di permettere a qualsiasi host di connettersi per qualsiasi utente (specialmente non l'uso root). Se state usando mysql per un'applicazione client/server, preferite un indirizzo di sottorete. Se state usando mysql con un web server o un application server, usate IP specifici.

Commentari (0)