Zainstalowałem serwer MySQL na zdalnym komputerze Ubuntu. W tabeli root
definiujemy użytkownika w mysql.user
następujący sposób:
mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Mam dostęp z użytkownikiem root
z tego samego interfejsu wiersza poleceń maszyny zdalnej przy użyciu standardowego mysql
klienta. Teraz chcę zezwolić na dostęp do roota z każdego hosta w Internecie , więc spróbowałem dodać następujący wiersz (jest to dokładny duplikat pierwszego wiersza z poprzedniego zrzutu, z wyjątkiem host
kolumny):
mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Ale mój klient na moim osobistym komputerze nadal mi mówi (zasłoniłem adres IP serwera):
Błąd SQL (2003): nie można połączyć się z serwerem MySQL na '46 .xxx '(10061)
Nie mogę stwierdzić, czy jest to błąd uwierzytelniania, czy błąd sieci. Na firewallu serwera włączyłem port 3306 / TCP dla 0.0.0.0/0 i to jest dla mnie ok ...
źródło
bind-address
w my.cnfOdpowiedzi:
Proces ten składa się z dwóch etapów:
a) Przyznaj uprawnienia. Jako użytkownik root wykonaj następujące czynności, zastępując
'password'
aktualne hasło roota:b) powiąż ze wszystkimi adresami:
Najłatwiejszym sposobem jest wykomentowanie linii w
my.cnf
pliku:i zrestartuj mysql
Domyślnie wiąże się tylko z localhost, ale jeśli skomentujesz wiersz, będzie on wiązał się ze wszystkimi znalezionymi interfejsami. Skomentowanie wiersza jest równoważne z
bind-address=*
.Aby sprawdzić, gdzie usługa mysql została powiązana, wykonaj jako root:
Aktualizacja dla Ubuntu 16:
Plik konfiguracyjny to (teraz)
(przynajmniej na standardowym Ubuntu 16)
źródło
USE mysql; UPDATE user SET Grant_priv='Y' WHERE user='root';
Uruchom następujące zapytanie:
use mysql;
update user set host='%' where host='localhost'
UWAGA: Nie zalecane do użytku produkcyjnego.
źródło
update mysql.user set host='%' where user='root'
Czasami
Powinien być
źródło
MYSQL 8.0 - otwórz klienta wiersza poleceń mysql
PRZYZNAJ WSZYSTKIE UPRAWNIENIA NA *. * TO 'root' @ 'localhost';
użyj mysql
UPDATE mysql.user SET host = '%' WHERE user = 'root';
Uruchom ponownie usługę mysql
źródło
MariaDB działająca na Raspbian - plik zawierający adres powiązania jest trudny do zlokalizowania. MariaDB ma kilka niezbyt pomocnych informacji na ten temat.
użyłem
zlokalizować, gdzie jest to cholerstwo.
Musiałem także ustawić uprawnienia i hosty w mysql, jak wszyscy powyżej wskazali.
A także dobrze się bawiłem, otwierając port 3306 do zdalnych połączeń z moim Raspberry Pi - w końcu użyłem iptables-persistent .
Teraz wszystko działa świetnie.
źródło
jeśli masz wiele sieci podłączonych do twojego systemu operacyjnego, musisz określić jedną z tych sieci w bind-addres z pliku my.conf. przykład:
ten adres IP pochodzi z konfiguracji ethX.
źródło
W moim przypadku problemem było ustawienie „bind-address”. Komentując to ustawienie w
my.cnf
tak nie pomaga, bo w moim przypadku mysql ustawić domyślną do 127.0.0.1 z jakiegoś powodu.Aby sprawdzić, jakiego ustawienia obecnie używa MySql, otwórz wiersz poleceń w swoim lokalnym oknie:
Odczytaj aktualne ustawienie:
Powinieneś zobaczyć 0.0.0.0 tutaj, jeśli chcesz zezwolić na dostęp ze wszystkich hostów. Jeśli tak nie jest, edytuj swój
/etc/mysql/my.cnf
adres wiązania i ustaw go w sekcji [mysqld]:Na koniec zrestartuj serwer MySql, aby wybrać nowe ustawienie:
Spróbuj ponownie i sprawdź, czy wybrano nowe ustawienie.
źródło
mysql_update
jest tym, czego potrzebujesz.Nie wiem, dlaczego ktokolwiek miałby stosować bardziej złożone sposoby naprawienia tego problemu, skoro MySql łaskawie zbudował narzędzie, które już to robi ...
źródło