Per mesi mi sono connesso all'istanza di MySQL in esecuzione sul nostro server di test locale attraverso un tunnel SSH senza problemi. All'improvviso, però, senza modifiche che mi vengono in mente, il server ha iniziato a rifiutare il tentativo di accesso da Sequel Pro con l'errore:
Impossibile connettersi all'host 127.0.0.1 perché l'accesso è stato negato.
Controlla nuovamente il nome utente e la password e assicurati che l'accesso dalla tua posizione corrente sia consentito.
MySQL ha dichiarato: Accesso negato per l'utente 'root' @ 'localhost' (usando la password: SÌ)
Sono in grado di accedere dal terminale quando connesso direttamente al server tramite SSH, non solo attraverso un tunnel SSH. Il problema non è specifico di Sequel Pro o solo a me stesso, quando si connette tramite MySQL Workbench ottengo lo stesso errore degli altri in ufficio. Ho reimpostato la password mysqladmin
solo per ragioni di sanità mentale, questo non è sicuramente il problema.
Quando ho iniziato a esaminarlo di più, ho notato che l'errore stava segnalando il server come "localhost", anziché "127.0.0.1", che ho inserito in Sequel Pro. Un amico ha suggerito che probabilmente è solo una cattiva gestione degli errori, ma sembra strano data la differenza significativa tra localhost e 127.0.0.1 in MySQL.
Nel tentativo di aggirare il problema del tunneling, ho concesso l'accesso a root @%, in modo da poter connettermi direttamente. Questo funziona per la maggior parte, posso visualizzare i dati della tabella, creare nuovi database, ecc. L'unico problema è quando vengo a creare utenti ottengo l'errore:
Accesso negato per l'utente 'root' @ '%' (utilizzando la password: SÌ)
Stranamente l'utente viene effettivamente creato, penso che sia solo un problema con la concessione. Ancora una volta, però, dal terminale posso fare qualsiasi cosa accedendo come root.
Qualcuno può aiutare a far luce sul perché le connessioni del tunnel e (probabilmente) i comandi di concessione ricevono l'errore di accesso negato?
Per riferimento MySQ è la versione 5.6.16 con principalmente le impostazioni predefinite, installata tramite Homebrew su una macchina MAC OS X Server.
Aggiornare
Ecco l'elenco degli host su cui è attualmente concesso l'accesso a root:
mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host | user |
+----------------+------+
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+----------------+------+
4 rows in set (0.00 sec)
A quanto ho capito, la prima riga ("%") dovrebbe davvero rendere le altre ridondanti?
Aggiornamento 2
Risolto il problema di concessione; l'utente root @% non ha ottenuto tutti i privilegi con l'aggiunta with grant option
alla fine, quindi potrebbe fare tutto tranne che concedere. Mi piacerebbe comunque sapere perché i tunnel SSH vengono negati.