Od miesięcy łączę się z instancją MySQL działającą na naszym lokalnym serwerze testowym przez tunel SSH bez żadnych problemów. Nagle jednak, bez żadnych zmian, które mogę wymyślić, serwer zaczął odrzucać próbę logowania z Sequel Pro z błędem:
Nie można połączyć się z hostem 127.0.0.1, ponieważ odmówiono dostępu.
Sprawdź dwukrotnie swoją nazwę użytkownika i hasło oraz upewnij się, że dostęp z bieżącej lokalizacji jest dozwolony.
MySQL powiedział: Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: TAK)
Jestem w stanie zalogować się z terminala, gdy jestem podłączony bezpośrednio do serwera przez SSH, ale nie przez tunel SSH. Problem nie jest specyficzny ani dla Sequel Pro, ani dla mnie samego, pojawia się ten sam błąd podczas łączenia przez MySQL Workbench, jak inni w biurze. Zresetowałem hasło mysqladmin
tylko dla zachowania rozsądku, to zdecydowanie nie jest problem.
Kiedy zacząłem bardziej się tym zajmować, zauważyłem, że błąd zgłaszał serwer jako „localhost”, zamiast „127.0.0.1”, który wprowadziłem w Sequel Pro. Przyjaciel zasugerował, że to prawdopodobnie po prostu zła obsługa błędów, ale wydaje się to dziwne, biorąc pod uwagę znaczącą różnicę między localhost a 127.0.0.1 w MySQL.
Próbując obejść problem z tunelowaniem, przyznałem dostęp do root @%, dzięki czemu mogę się połączyć bezpośrednio. Działa to w przeważającej części, mogę wyświetlać dane tabeli, tworzyć nowe bazy danych itp. Jedynym problemem jest to, że kiedy przychodzę tworzyć użytkowników, pojawia się błąd:
Odmowa dostępu dla użytkownika „root” @ „%” (przy użyciu hasła: TAK)
Dziwne, że użytkownik został stworzony, myślę, że to tylko problem z dotacją. Znów jednak z terminala mogę zrobić wszystko, gdy jestem zalogowany jako root.
Czy ktoś może wyjaśnić, dlaczego połączenia tunelowe i (prawdopodobnie) polecenia przyznania otrzymują błąd odmowy dostępu?
Dla porównania MySQ to wersja 5.6.16 z przeważnie domyślnymi ustawieniami, instalowana przez Homebrew na komputerze z systemem Mac OS X Server.
Aktualizacja
Oto lista hostów, do których root ma obecnie dostęp:
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)
Jak rozumiem, pierwszy wiersz („%”) powinien naprawdę sprawić, że pozostałe będą zbędne?
Aktualizacja 2
Naprawiono problem z dotacją; Użytkownik root @% nie otrzymał wszystkich uprawnień z dodatkowymi with grant option
na końcu, więc mógł zrobić wszystko oprócz przyznania. Nadal chciałbym wiedzieć, dlaczego odmawia się tuneli SSH.