В течение нескольких месяцев я без проблем подключался к экземпляру 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-туннелям отказывают.
источник
Ответы:
В MySQL
localhost
ключевое слово зарезервировано для подключения через сокет MySQL, и вы должны использовать ip-адрес127.0.0.1
для TCP-подключений к сетевому порту MySQL на 127.0.0.1. Это означает, что и сервер должен предоставлять привилегии пользователям конкретно127.0.0.1
, а клиент должен использовать-h 127.0.0.1
для прохождения туннеля вместо подключения к локальному сокету.Чтобы разрешить вам доступ с использованием переадресации порта SSH, вам нужно что-то вроде:
а потом беги
и, возможно,
Если это все еще не работает, перезапустите процесс сервера.
В сообщениях об ошибках 127.0.0.1 после обратного поиска DNS переводится на
localhost
затруднение отладки.Как описано в руководстве :
источник
grant all on *.* to 'root'@'127.0.0.1' with grant option;
ssh -h 127.0.0.1 -u root -p
удаленно на сервере, соединение также отклоняется.-h 127.0.0.1
сбой соединений на сервере, перезагрузив mysql, но сокет ssh по-прежнему не работаетЯ видел в прошлом с ssh-туннелями, что есть разница между Grant all для «localhost» и Предоставить все для «127.0.0.1», поэтому попробуйте предоставить «127.0.0.1» вместо этого или в дополнение к вашему «localhost».
источник
grant
операторы с,identified by ..
чтобы убедиться, что все корневые пароли одинаковы, но без радости.Вместо того, чтобы использовать Sequel для создания туннеля, что вы создаете туннель самостоятельно?
ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ domain
Затем подключитесь с помощью продолжения к 127.0.0.1:3306. Можете ли вы подключиться? Появляется ли что-нибудь на вашем терминале (или логи клиента ssh)?
источник