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.
źródło
Odpowiedzi:
W MySQL
localhost
słowo kluczowe jest zarezerwowane do połączenia za pomocą gniazda MySQL i powinieneś używać adresu IP127.0.0.1
do połączeń TCP z portem sieci MySQL na 127.0.0.1. Oznacza to, że zarówno serwer musi nadawać uprawnienia użytkownikom127.0.0.1
, a klient musi-h 127.0.0.1
przejść przez tunel zamiast łączyć się z gniazdem lokalnym.Aby umożliwić dostęp za pomocą przekierowania portów SSH, potrzebujesz czegoś takiego:
a następnie biegnij
i ewentualnie
Jeśli nadal nie działa, zrestartuj proces serwera.
W komunikatach o błędach 127.0.0.1 po odwróceniu wyszukiwania DNS zostaje przetłumaczone,
localhost
co utrudnia debugowanie.Zgodnie z opisem w instrukcji :
źródło
grant all on *.* to 'root'@'127.0.0.1' with grant option;
ssh -h 127.0.0.1 -u root -p
zdalnie na serwerze, połączenie jest również odrzucane.-h 127.0.0.1
problemy z połączeniami na serwerze poprzez ponowne uruchomienie mysql, ale gniazdo ssh nadal nie działaW przeszłości widziałem w tunelach ssh, że istnieje różnica między Grant all na „localhost” i all na „127.0.0.1”, więc spróbuj nadać „127.0.0.1” zamiast lub oprócz twojego „localhost”.
źródło
grant
instrukcje,identified by ..
aby upewnić się, że wszystkie hasła roota są takie same, ale bez radości.Zamiast używać Sequel do tworzenia tunelu, co sam tworzysz tunel?
ssh -Cc blowfish -Nf -vv -L3306: localhost: 3306 sshuser @ domain
Następnie połącz za pomocą Sequel do 127.0.0.1:3306 Czy możesz się połączyć? Czy coś pojawia się na twoim terminalu (lub logach klienta ssh)?
źródło