Durante meses, me he conectado a la instancia de MySQL que se ejecuta en nuestro servidor de prueba local a través de un túnel SSH sin ningún problema. Sin embargo, de repente, sin cambios en los que pueda pensar, el servidor ha comenzado a rechazar el intento de inicio de sesión de Sequel Pro con el error:
No se puede conectar al host 127.0.0.1 porque se denegó el acceso.
Vuelva a verificar su nombre de usuario y contraseña y asegúrese de permitir el acceso desde su ubicación actual.
MySQL dijo: Acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: YES)
Puedo iniciar sesión desde la terminal cuando estoy conectado directamente al servidor a través de SSH, pero no a través de un túnel SSH. El problema no es específico para Sequel Pro o solo para mí, obtengo el mismo error al conectarme a través de MySQL Workbench que otros en la oficina. He restablecido la contraseña mysqladmin
solo por el bien de la cordura, definitivamente ese no es el problema.
Cuando comencé a buscarlo más, noté que el error informaba que el servidor era "localhost", en lugar de "127.0.0.1", que ingresé en Sequel Pro. Un amigo sugirió que probablemente solo sea un mal manejo de errores, pero parece extraño dada la diferencia significativa entre localhost y 127.0.0.1 en MySQL.
En un intento por solucionar el problema de la tunelización, concedí acceso a root @%, para poder conectarme directamente. Esto funciona en su mayor parte, puedo ver los datos de la tabla, crear nuevas bases de datos, etc. El único problema es cuando vengo a crear usuarios y aparece el error:
Acceso denegado para el usuario 'root' @ '%' (utilizando contraseña: SÍ)
Curiosamente, el usuario está realmente creado, creo que es solo un problema con la concesión. Sin embargo, de nuevo desde el terminal puedo hacer cualquier cosa cuando inicie sesión como root.
¿Alguien puede ayudar a arrojar algo de luz sobre por qué las conexiones de túnel y (probablemente) los comandos de concesión reciben el error de acceso denegado?
Como referencia, MySQ es la versión 5.6.16 con la mayoría de las configuraciones predeterminadas, instaladas a través de Homebrew en un equipo con MAC OS X Server.
Actualizar
Aquí está la lista de hosts a los que actualmente se le otorga acceso 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)
Según tengo entendido, ¿la primera fila ("%") realmente debería hacer que las otras sean redundantes?
Actualización 2
Se corrigió el problema de la subvención; Al usuario root @% no se le han otorgado todos los privilegios con el extra with grant option
al final, por lo que podría hacer todo menos otorgar. Sin embargo, aún me encantaría saber por qué se niegan los túneles SSH.