Wprowadzenie
Ten artykuł jest przeznaczony dla użytkowników, którzy próbują zalogować się do MySQL za pomocą poprawnego hasła, ale otrzymują błąd: „Error 1045: Access denied for user (using password: YES)”
Jeśli zapomniałeś hasła root MySQL, zapoznaj się z tym artykułem:
- Jak zresetować hasło root MySQL.
Jeśli próbujesz zalogować się jako root przez phpMyAdmin, zobacz:
- Can’t log into phpMyAdmin: mysqli_real_connect(): (HY000/1698): Access denied for user 'root’@’localhost’
Understanding MySQL Users and Hosts
MySQL ogranicza dostęp użytkownika na podstawie wartości host
użytkownika. Domyślnie wartość host
dla konta root i nowych użytkowników jest ustawiona na localhost
, co oznacza, że możesz zalogować się tylko poprzez lokalny komputer lub poprzez phpMyAdmin, jeśli jest zainstalowany na tym samym localhost. Jeśli spróbujesz zalogować się na konto localhost
zdalnie, może odrzucić prawidłowe hasło z „Odmowa dostępu dla użytkownika (używającego hasła: YES)”.
Jeśli spojrzymy na tę prostą listę użytkowników MySQL poniżej jako przykład:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |
Powyżej mamy trzech użytkowników MySQL z różnymi wartościami host
.
Przyjrzyjmy się kilku scenariuszom, w których poprawne hasło może zostać odrzucone w zależności od wartości host
:
- User
- ✅ Może zalogować się z
localhost
, czyli z maszyny, na której uruchomiona jest usługa MySQL. - ✅ Może zalogować się z phpMyAdmin, jeśli jest zainstalowany na tym samym localhost.
- ❌Nie może zalogować się zdalnie i otrzyma „Access denied for user (using password: YES)”.
- ✅ Może zalogować się z
- User
- ✅ Może zalogować się tylko z adresu IP
10.0.53.185
. - ❌Nie może zalogować się z żadnego innego adresu IP „Access denied for user (using password: YES)”.
- ❌ Nie można zalogować się z localhost „Odmowa dostępu dla użytkownika (używającego hasła: TAK)”.
- ❌ Nie można zalogować się z phpMyAdmin „Odmowa dostępu dla użytkownika (używającego hasła: TAK)”.
- ✅ Może zalogować się tylko z adresu IP
- User
%
- ✅ Może zalogować się z dowolnego miejsca (
%
jest wieloznacznikiem).
- ✅ Może zalogować się z dowolnego miejsca (
Zmiana wartości hosta użytkownika MySQL
Możesz zmienić wartość hosta dla użytkownika używającego konta root MySQL lub dowolnego konta z uprawnieniami superuser. Można to zrobić poprzez linię poleceń lub phpMyAdmin.
Via Command Line
Będziesz potrzebował dostępu do bazy danych MySQL używając root lub superuser, który ma dostęp do tabeli Użytkownicy MySQL.
Konto root jest domyślnie dostępne tylko z localhost, więc możesz otrzymać „Odmowa dostępu dla użytkownika (używającego hasła: YES)” jeśli spróbujesz zalogować się zdalnie. W takim przypadku będziesz musiał w jakiś sposób uzyskać lokalny dostęp do serwera.
Aby zalogować się do lokalnej bazy danych MySQL:
mysql -u root -p
Aby zalogować się do zdalnej bazy danych MySQL, po prostu zastąp hostname_or_ip
swoim własnym.
mysql -u root -h hostname_or_ip -p
Po zalogowaniu się do MySQL, wymień wszystkich użytkowników MySQL i odpowiadające im hosty w bazie danych.
SELECT User,Host FROM mysql.user;
Wynik:
+------------------+-------------+| User | Host |+------------------+-------------+| test-user1 | localhost || test-user3 | 10.0.53.185 || test-user2 | % |+------------------+-------------+3 rows in set (0.00 sec)
Powyżej możemy zobaczyć listę użytkowników MySQL i ich hostów.
Jeśli chcemy zalogować się używając test-user1
zdalnie z dowolnego miejsca, musimy zmienić wartość hosta na symbol wieloznaczny %
, który pozwoli na zdalne logowanie z dowolnego miejsca. Dla zwiększenia bezpieczeństwa można to zmienić na adres IP.
W poniższym przykładzie zmieniamy host dla test-user1
z localhost
na %
%
oznacza symbol wieloznaczny i pozwoli temu użytkownikowi zalogować się zdalnie z dowolnego miejsca.
RENAME USER 'test-user1'@'localhost' TO 'test-user1'@'%';
Musisz przepłukać uprawnienia MySQL, aby zmiany zaczęły obowiązywać.
FLUSH PRIVILEGES;
Teraz spróbuj zalogować się ponownie zdalnie.
Via phpMyAdmin
Zaloguj się do phpMyAdmin, używając konta root lub konta z uprawnieniami superużytkownika.
- Po zalogowaniu się do phpMyadmin, kliknij
mysql
bazę danych w lewej kolumnie. - Kliknij zakładkę SQL.
- Wpisz lub wklej w polu zapytania SQL:
SELECT User,Host FROM mysql.user;
, aby wyświetlić listę wszystkich użytkowników MySQL w bazie danych. - Kliknij Przejdź, aby uruchomić zapytanie.
Powinieneś teraz zobaczyć listę wszystkich użytkowników MySQL i odpowiadających im hostów.
Aby zmienić wartość hosta użytkownika MySQl:
- Kliknij dwukrotnie na pole hosta obok użytkownika, którego chcesz zmienić (na czerwono poniżej).
- Wpisz
%
aby umożliwić każdemu zalogowanie się do tego użytkownika z dowolnego miejsca. Możesz również zmienić to na zdalny IP dla lepszego bezpieczeństwa. - Naciśnij
ENTER
na klawiaturze, aby zapisać zmiany.
Nie skończyłeś jeszcze. Musisz teraz przepłukać uprawnienia MySQL.
- Kliknij ponownie kartę SQL
- Wpisz lub wklej w polu zapytania SQL:
FLUSH PRIVILEGES;
- Kliknij Przejdź, aby uruchomić zapytanie.
Teraz powinieneś być w stanie zalogować się zdalnie.
Daj mi znać, czy to pomogło. Śledź mnie na Twitterze, Facebooku i YouTube, albo 🍊 kup mi smoothie.
p.s. Zwiększyłem swoje przychody z AdSense o 200% używając AI 🤖. Przeczytaj moją recenzję Ezoic, aby dowiedzieć się jak.
.