Месяцями я підключався до екземпляра 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 відмовляються.