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.