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.
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".
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<hostname> -u<somebody> -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 <mysqlclient>
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' (<ipaddress> <fullyqualifiedhostname> <hostname>
<- kolejność może mieć znaczenie).
Wpis w pliku hosta mojego serwera'pozwalający na odwrotne wyszukanie klienta MySQL rozwiązał właśnie ten problem.
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.