Host 'xxx.xx.xxx.xxx' nie może połączyć się z tym serwerem MySQL

Powinno to być bardzo proste, ale nie mogę tego zrobić dla mojego życia.
I'm po prostu próbuje połączyć się zdalnie z moim serwerem MySQL.

łącząc się jako

mysql -u root -h localhost -p  

działa dobrze, ale próbując

mysql -u root -h 'any ip address here' -p

nie powiedzie się z błędem

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

W tabeli mysql.user znajduje się dokładnie taki sam wpis dla użytkownika 'root' z hostem 'localhost' jak inny z hostem '%'.

I'm at my wits' end, and have no idea how to proceed. Wszelkie pomysły są mile widziane.

Rozwiązanie

Prawdopodobnie jest to środek ostrożności. Możesz spróbować dodać nowe konto administratora:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Chociaż, jak zauważył Pascal i inni, nie jest to najlepszy pomysł, aby użytkownik z takim dostępem był otwarty dla każdego IP. Jeśli potrzebujesz użytkownika administracyjnego, użyj root'a i pozostaw go na localhost. Dla każdego innego działania określ dokładnie uprawnienia, których potrzebujesz i ogranicz dostęp użytkownika, jak Pascal zasugerował poniżej.

Edytować:

Z FAQ MySQL:

Jeśli nie możesz dowiedzieć się, dlaczego otrzymujesz. Odmowa dostępu, usuń z użytkownika tabeli wszystkie wpisy, które mają Host wartości zawierające symbole wieloznaczne (wpisy które zawierają '%' lub '_' znaki). A bardzo częstym błędem jest wstawianie nowego wpis z Host='%' i User='some_user', myśląc, że to pozwala podać localhost, aby połączyć się z tej samej maszyny. The powodem, że to nie działa jest to, że domyślne uprawnienia zawierają wpis z Host='localhost' i User=''. Ponieważ ten wpis ma Host wartość 'localhost', która jest bardziej specyficzny niż '%', jest on używany w preferencji do nowego wpisu, gdy łącząc się z localhost! Prawidłową procedurą jest wstawienie drugiego wpisu z Host='localhost' i User='some_user', lub usunąć wpis wpis z Host='localhost' i User='''. Po usunięciu wpisu, pamiętaj, aby wydać polecenie FLUSH PRIVILEGES aby ponownie załadować tabele uprawnień. Zobacz także punkt 5.4.4, "Kontrola dostępu, etap 1. Kontrola dostępu, Etap 1: Połączenie Weryfikacja".

Komentarze (8)

Wiadomość *Host ''xxx.xx.xxx.xxx'' nie może połączyć się z tym serwerem MySQL jest odpowiedzią serwera MySQL na klienta MySQL. Zauważ, że zwraca adres IP, a nie nazwę hosta.

Jeśli próbujesz się połączyć za pomocą mysql -h -u -p i zwraca tę wiadomość z adresem IP, to serwer MySQL nie jest w stanie wykonać reverse lookup na kliencie. Jest to krytyczne, ponieważ w ten sposób mapuje klienta MySQL do dotacji.

Upewnij się, że możesz wykonać nslookup z serwera MySQL. Jeśli to nie zadziała, to znaczy, że nie ma wpisu w serwerze DNS. Alternatywnie, możesz umieścić wpis w pliku HOSTS serwera MySQL' (` `

Komentarze (1)

Jeśli modyfikujesz tabele uprawnień ręcznie (używając INSERT, UPDATE, itp.), powinieneś wykonać polecenie polecenie FLUSH PRIVILEGES, aby powiedzieć serwerowi, aby ponownie załadował tabele uprawnień.

PS: Nie polecam pozwalać każdemu hostowi łączyć się z każdym użytkownikiem (szczególnie nie z root). Jeśli używasz mysql do aplikacji klient/serwer, preferuj adres podsieci. Jeśli używasz mysql z serwerem WWW lub serwerem aplikacji, użyj konkretnych IP.

Komentarze (0)