В течение нескольких месяцев я без проблем подключался к экземпляру MySQL, работающему на нашем локальном тестовом сервере через SSH-туннель. Внезапно, хотя, без каких-либо изменений, о которых я могу думать, сервер начал отклонять попытку журнала из Sequel Pro с ошибкой:
Невозможно подключиться к хосту 127.0.0.1, потому что доступ запрещен.
Дважды проверьте свое имя пользователя и пароль и убедитесь, что доступ с вашего текущего местоположения разрешен.
MySQL сказал: доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: ДА)
Я могу войти с терминала, когда подключен напрямую к серверу через SSH, но не через туннель SSH. Проблема не специфична для Sequel Pro или только для меня, я получаю ту же ошибку при подключении через MySQL Workbench, что и другие в офисе. Я сбросил пароль mysqladmin
только ради здравомыслия, это определенно не проблема.
Когда я стал больше разбираться в этом, я заметил, что ошибка сообщала серверу как «localhost», а не «127.0.0.1», который я ввел в Sequel Pro. Друг предположил, что это, вероятно, просто плохая обработка ошибок, но это кажется странным, учитывая значительную разницу между localhost и 127.0.0.1 в MySQL.
В попытке обойти проблему туннелирования я предоставил доступ к root @%, чтобы я мог подключиться напрямую. Это работает по большей части, я могу просматривать данные таблиц, создавать новые базы данных и т. Д. Единственная проблема - когда я прихожу, чтобы создать пользователей, я получаю сообщение об ошибке:
Доступ запрещен для пользователя 'root' @ '%' (с использованием пароля: ДА)
Как ни странно, пользователь действительно создан, я думаю, что это просто проблема с грантом. Опять же, хотя, из терминала я могу делать все что угодно, когда залогинен как root.
Кто-нибудь может помочь пролить свет на то, почему туннельные соединения и (возможно) команды предоставления получают ошибку отказа в доступе?
Для справки: MySQ - версия 5.6.16 с настройками по умолчанию, установленными через Homebrew на компьютере с MAC OS X Server.
Обновить
Вот список хостов, к которым 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)
Как я понимаю, первый ряд («%») должен действительно сделать остальные избыточными?
Обновление 2
Исправлена проблема с грантом; пользователю root @% не предоставлены все привилегии с дополнительным with grant option
в конце, поэтому он может делать все, кроме предоставления. Тем не менее, хотелось бы знать, почему SSH-туннелям отказывают.