Ошибка доступа запрещен MySQL при соединении через туннель SSH

В течение многих месяцев я соединялся с экземпляром MySQL, работающим на нашем локальном тестовом сервере через туннель SSH без любых проблем. Внезапно, хотя, без изменений я могу думать, сервер начал отклонять журнал в попытке от Продолжения Pro с ошибкой:

Невозможно подключиться к хостом 127.0.0.1, потому что доступ был запрещен.

Перепроверьте свое имя пользователя и пароль и удостоверьтесь, что доступ от Вашего текущего местоположения разрешен.

MySQL сказан: Доступ запрещен для пользователя 'базируется' 'localhost' (использование пароля: ДА)

Я могу войти в систему от терминала при прямом соединении с сервером через SSH, просто не через туннель SSH. Проблема не характерна для Продолжения Pro или просто меня также, я получаю ту же ошибку при соединении через MySQL Workbench также, как и другие в офисе. Я изменил пароль с mysqladmin только для пользы исправности, это - определенно не проблема.

Когда я начал изучать его больше, я заметил, что ошибка сообщала о сервере как "localhost", вместо "127.0.0.1", который я ввел в Продолжение Pro. Друг предположил, что это - вероятно, просто плохая обработка ошибок, но это кажется странным, учитывая значительную разницу между localhost и 127.0.0.1 в MySQL.

В попытке обойти туннелирующую проблему, я предоставил доступ для укоренения %, так, чтобы я мог соединиться непосредственно. Это работает по большей части, я могу просмотреть данные таблицы, создать новые базы данных и т.д. Единственная проблема состоит в том, когда я приезжаю для создания пользователей, я получаю ошибку:

Доступ запрещен для пользователя 'базируется' '%' (использующий пароль: ДА)

Странно пользователь на самом деле создается, я думаю, что это - просто проблема с предоставлением. Снова, хотя, от терминала я могу сделать что-либо при входе в систему как корень.

Кто-либо может помочь пролить некоторый свет на то, почему туннельные соединения и (вероятно) допускают, что команды получают ошибку доступа запрещен?

Поскольку ссылочный MySQ является версией 5.6.16 с главным образом настройками по умолчанию, установленными через Домашнее пиво на машине Сервера Mac OS X.

Обновление

Вот список хостов, на которых корень является в настоящее время предоставляемым доступом:

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

Устраненный проблема предоставления; корню пользователь % не предоставили все полномочия с дополнительным with grant option на конце, таким образом, это могло сделать все кроме предоставления. Все еще любил бы знать, почему туннели SSH отклоняются все же.

12
задан 21 July 2014 в 12:21
3 ответа

В MySQL ключевое слово localhost зарезервировано для соединения с использованием сокета MySQL, и вы должны использовать ip-адрес 127.0.0.1 для TCP-соединений с сетевым портом MySQL на 127.0.0.1. Это означает, что оба сервера должны предоставлять пользователям привилегии из специфических 127.0.0.1, и клиентов должны использовать -h 127.0.0.1 для прохождения через туннель вместо подключения к локальному сокету.

Чтобы разрешить вам доступ, используя переадресацию SSH-порта, вам нужно что-то вроде:

GRANT SELECT ON *.* TO user@`127.0.0.1`

, а затем запустить

FLUSH PRIVILEGES;

и, возможно,

FLUSH QUERY CACHE;

Если это все еще не работает, перезапустите процесс сервера.

В сообщениях об ошибках 127.0.0.1 после обратного DNS поиска переводится на localhost, что затрудняет отладку.

Как описывает manual:

В Unix, MySQL программы обращаются с именем хоста localhost специально, таким образом, что это, скорее всего, отличается от того, что вы ожидаете от других программ, работающих в сети. Для подключения к localhost, MySQL программы пытаются подключиться к локальному серверу, используя файл сокета Unix. Это происходит, даже если для указания номера порта задан параметр --port или -P. Чтобы убедиться, что клиент устанавливает TCP/IP соединение с локальным сервером, используйте -host или -h, чтобы указать значение имени хоста 127.0.0.1, или IP-адрес или имя локального сервера. Вы также можете явно указать протокол соединения, даже для локального хоста, используя опцию --protocol=TCP. Например:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

- опция --protocol позволяет установить определенный тип соединения, даже если другие опции обычно устанавливаются по умолчанию для какого-то другого протокола.

18
ответ дан 2 December 2019 в 21:34

Я уже видел в прошлом с ssh-тюнелями, что есть разница между Grant all to "localhost" и Grant all to "127.0.0.1", так что попробуйте Grant all to "127.0.0.1" вместо этого или в дополнение к вашему гранту "localhost".

.
1
ответ дан 2 December 2019 в 21:34

Вместо того, чтобы использовать Sequel для создания туннеля, что вы сами создаете туннель ?

ssh -Cc blowfish -Nf -vv -L3306:localhost:3306 sshuser@domain

Затем соединитесь с Sequel на 127.0.0.1:3306. Ты можешь подключиться? Появляется ли что-нибудь на вашем терминале (или в журналах ssh-клиентов)?

.
0
ответ дан 2 December 2019 в 21:34

Теги

Похожие вопросы