L'accesso MySQL ha negato l'errore quando si connette tramite tunnel SSH

Per mesi ho collegato all'istanza di MySQL che esegue sul nostro server di test locale attraverso un tunnel SSH senza problemi. Tutto d'improvviso, senza cambiamenti che posso pensare, il server ha iniziato a rifiutare il tentativo di Sequel Pro con l'errore:

Imansible connettersi all'host 127.0.0.1 perché l'accesso è stato negato.

  • Come posso distriggersre un account utente dal CLI con Mac OS X Server?
  • auth.log indica l'errore con JSchException?
  • IP privato di Vagrant non trovato dopo la modifica della networking
  • Come sapere se una chiave SSH pubblica ha una passphrase
  • Che cosa fanno effettivamente i meccanismi di authorization OS X?
  • Come proteggere SFTP senza ricompilare OpenSSH?
  • Doppio controllo del nome utente e della password e accertarsi che l'accesso dalla posizione corrente sia consentito.

    MySQL ha detto: Accesso negato per 'root' @ 'localhost' dell'utente (usando password: SI)

    Sono in grado di eseguire il login dal terminal quando sono collegati direttamente al server tramite SSH, non solo attraverso un tunnel SSH. Il problema non è specifico per Sequel Pro o solo io stesso, ho lo stesso errore quando si connette MySQL Workbench come fanno gli altri in ufficio. Ho resettato la password con mysqladmin solo per amor di sanità, non è sicuramente il problema.

    Quando ho iniziato a esaminarlo, ho notato che l'errore stava riportndo il server come "localhost" invece di "127.0.0.1" che ho inserito in Sequel Pro. Un amico ha suggerito che è probabilmente una ctriggers gestione degli errori, ma sembra strano dato la differenza significativa tra localhost e 127.0.0.1 in MySQL.

    Nel tentativo di aggirare il problema della galleria, ho concesso l'accesso a root @%, affinché posso collegarmi direttamente. Questo funziona per la maggior parte, posso visualizzare dati di tabella, creare nuovi database, ecc. L'unico problema è quando vengo a creare gli utenti che ottengo l'errore:

    Accesso negato per utente 'root' @ '%' (utilizzando password: SI)

    Stranamente l'utente è in realtà creato, penso che sia solo un problema con la concessione. Di nuovo, però, dal terminal posso fare qualsiasi cosa quando accedi come root.

    Qualcuno può aiutare a far luce sul perché le connessioni tunnel e (probabilmente) i comandi di concessione stanno ricevendo l'errore di accesso negato?

    Per riferimento MySQ è la versione 5.6.16 con le predefinite predefinite, installata tramite Homebrew su una macchina MAC OS X Server.

    Aggiornare

    Ecco l'elenco degli host che la root è attualmente concessa l'accesso:

     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) 

    Come lo capisco, la prima row ("%") dovrebbe realmente rendere gli altri ridondanti?

    Aggiorna 2

    Ha risolto il problema della sovvenzione; l'utente root @% non è stato concesso tutti i privilegi con l' with grant option aggiuntiva with grant option alla fine, in modo da poter fare tutto, tranne che concedere. Sarebbe ancora amato sapere perché i tunnel SSH sono stati negati però.

    3 Solutions collect form web for “L'accesso MySQL ha negato l'errore quando si connette tramite tunnel SSH”

    In MySQL, la parola chiave localhost è riservata alla connessione utilizzando la socket MySQL e si dovrebbe utilizzare l'indirizzo IP 127.0.0.1 per le connessioni TCP alla port di networking MySQL su 127.0.0.1. Ciò significa che sia il server deve concedere privilegi agli utenti da specificamente 127.0.0.1 , e il client deve utilizzare -h 127.0.0.1 per passare attraverso il tunnel invece di connettersi a una presa locale.

    Per consentire l'accesso tramite l'inoltro della port SSH, è necessario:

     GRANT SELECT ON *.* TO user@`127.0.0.1` 

    e quindi eseguire

     FLUSH PRIVILEGES; 

    e forse

     FLUSH QUERY CACHE; 

    Se ancora non funziona, riavviare il process del server.

    Nei messaggi di errore 127.0.0.1 dopo una ricerca DNS inversa viene tradotto in localhost rendendo difficile il debugging.

    Come il manuale lo descrive:

    Su Unix, i programmi MySQL trattano specificamente il nome host localhost in un modo che è probabilmente diverso da quello che ti aspetti rispetto ad altri programmi basati sulla networking. Per connessioni a localhost, i programmi MySQL tentano di connettersi al server locale utilizzando un file socket Unix. Ciò si verifica anche se viene fornita un'opzione -port o -P per specificare un numero di port. Per assicurarsi che il client effettua una connessione TCP / IP al server locale, utilizzare --host o -h per specificare un valore di nome host di 127.0.0.1 o l'indirizzo IP o il nome del server locale. È anche ansible specificare il protocollo di connessione esplicitamente, anche per localhost, utilizzando l'opzione --protocol=TCP . Per esempio:

     shell> mysql --host=127.0.0.1 shell> mysql --protocol=TCP 

    L'opzione --protocol consente di stabilire un tipo di connessione particolare anche quando le altre opzioni normalmente sono predefinite ad un altro protocollo.

    Ho visto in passato con i tunnel ssh, che c'è una differenza tra Grant all a "localhost" e concedi tutto a "127.0.0.1", quindi prova a concedere a "127.0.0.1 invece o in aggiunta alla tua sovvenzione" localhost ".

    Invece di utilizzare il Sequel per creare il tunnel, cosa si crea il tunnel?

    ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ dominio

    Quindi connetti con Sequel a 127.0.0.1:3306 Puoi connetterti? Qualcosa viene visualizzato sul tuo terminal (oi registri client ssh)?

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.