Por meses, estive me conectando à instância do MySQL em execução no nosso servidor de teste local através de um túnel SSH sem problemas. De repente, porém, sem alterações que eu possa pensar, o servidor começou a rejeitar a tentativa de logon do Sequel Pro com o erro:
Não foi possível conectar ao host 127.0.0.1 porque o acesso foi negado.
Verifique seu nome de usuário e senha e verifique se o acesso a partir da sua localização atual é permitido.
O MySQL disse: Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: YES)
Consigo efetuar login no terminal quando conectado diretamente ao servidor por SSH, mas não por um túnel SSH. O problema não é específico para o Sequel Pro ou apenas para mim, recebo o mesmo erro ao conectar-me através do MySQL Workbench, assim como outros no escritório. Redefini a senha mysqladmin
apenas por uma questão de sanidade, esse definitivamente não é o problema.
Quando comecei a investigar mais, notei que o erro estava relatando o servidor como "localhost", em vez de "127.0.0.1", que eu inseri no Sequel Pro. Um amigo sugeriu que provavelmente é apenas um tratamento incorreto de erros, mas parece estranho, dada a diferença significativa entre localhost e 127.0.0.1 no MySQL.
Em uma tentativa de contornar o problema de encapsulamento, concedi acesso ao root @%, para que eu possa me conectar diretamente. Isso funciona na maior parte do tempo, eu posso ver os dados da tabela, criar novos bancos de dados, etc. O único problema é quando eu for criar usuários e recebo o erro:
Acesso negado para o usuário 'root' @ '%' (usando a senha: YES)
Estranhamente, o usuário é realmente criado, acho que é apenas um problema de concessão. Mais uma vez, no terminal, eu posso fazer qualquer coisa quando estiver logado como root.
Alguém pode ajudar a esclarecer por que as conexões de túnel e (provavelmente) os comandos de concessão estão recebendo o erro de acesso negado?
Para referência, o MySQ é a versão 5.6.16, com a maioria das configurações padrão, instaladas via Homebrew em uma máquina com MAC OS X Server.
Atualizar
Aqui está a lista de hosts aos quais o root atualmente tem acesso:
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)
Pelo que entendi, a primeira linha ("%") deve realmente tornar as outras redundantes?
Atualização 2
Corrigido o problema de concessão; o usuário root @% não recebeu todos os privilégios com o extra with grant option
no final; portanto, ele pode fazer tudo, exceto conceder. Ainda gostaria de saber por que os túneis SSH estão sendo negados.
fonte
Respostas:
No MySQL, a
localhost
palavra-chave é reservada para conexão usando o soquete MySQL e você deve usar o endereço IP127.0.0.1
para conexões TCP à porta de rede MySQL em 127.0.0.1. Isso significa que tanto o servidor deve conceder privilégios para usuários especificamente127.0.0.1
, e o cliente deve usar-h 127.0.0.1
para atravessar o túnel em vez de ligar a um socket local.Para permitir o acesso usando o encaminhamento de porta SSH, você precisa de algo como:
e depois corra
e possivelmente
Se ainda não funcionar, reinicie o processo do servidor.
Nas mensagens de erro 127.0.0.1 após uma pesquisa DNS reversa, é traduzida para
localhost
dificultar a depuração.Como o manual descreve:
fonte
grant all on *.* to 'root'@'127.0.0.1' with grant option;
ssh -h 127.0.0.1 -u root -p
remotamente no servidor, a conexão também é rejeitada.-h 127.0.0.1
conexões de falha no servidor de reiniciar mysql, mas a tomada de ssh ainda não vai funcionarEu já vi no passado com tels ssh, que existe uma diferença entre Conceder tudo para "localhost" e conceder tudo para "127.0.0.1", portanto, tente conceder para "127.0.0.1 em vez disso ou em adição à sua concessão" localhost ".
fonte
grant
instruções comidentified by ..
para garantir que todas as senhas raiz sejam iguais, mas sem alegria.Em vez de usar o Sequel para criar o túnel, o que você mesmo criou?
ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ domain
Em seguida, conecte-se ao Sequel para 127.0.0.1:3306 Você pode se conectar? Aparece alguma coisa no seu terminal (ou nos logs do cliente ssh)?
fonte