Po pierwsze pozwól mi wspomnieć, że przejrzałem wiele sugerowanych pytań i nie znalazłem żadnej stosownej odpowiedzi. Oto co robię.
Jestem połączony z moją instancją Amazon EC2. Mogę zalogować się do katalogu głównego MySQL za pomocą tego polecenia:
mysql -u root -p
Następnie utworzyłem nowy rachunek użytkownika z hostem%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Przyznał wszystkie uprawnienia do rachunku użytkownika:
grant all privileges on *.* to 'bill'@'%' with grant option;
Następnie wychodzę z konta roota i próbuję zalogować się za pomocą rachunku:
mysql -u bill -p
wpisałem poprawne hasło i otrzymałem ten błąd:
BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika „rachunek” @ „localhost” (przy użyciu hasła: TAK)
mysql
access-denied
Ali
źródło
źródło
FLUSH PRIVILEGES
?Odpowiedzi:
Prawdopodobnie masz anonimowego użytkownika
''@'localhost'
lub''@'127.0.0.1'
.Zgodnie z instrukcją :
Dlatego taki anonimowy użytkownik „maskowałby” każdego innego użytkownika, takiego jak
'[any_username]'@'%'
podczas łączenia sięlocalhost
.'bill'@'localhost'
pasuje'bill'@'%'
, ale pasuje (np.)''@'localhost'
przed rękami.Zalecanym rozwiązaniem jest usunięcie tego anonimowego użytkownika (i tak zwykle jest to dobre rozwiązanie).
Poniższe zmiany są w większości nieistotne dla głównego pytania. Mają one jedynie odpowiedzieć na niektóre pytania zadane w innych komentarzach w tym wątku.
Edytuj 1
Uwierzytelnianie za
'bill'@'%'
pośrednictwem gniazda.Edytuj 2
Dokładnie taka sama konfiguracja, z wyjątkiem ponownej aktywacji sieci i teraz tworzę anonimowego użytkownika
''@'localhost'
.Edytuj 3
Taka sama sytuacja jak w edycji 2, teraz podając hasło anonimowego użytkownika.
Wniosek 1, z edycji 1: Można uwierzytelnić się
'bill'@'%'
przez gniazdo.Wniosek 2, z edycji 2: To, czy łączy się przez TCP, czy przez gniazdo, nie ma wpływu na proces uwierzytelniania (z wyjątkiem tego, że nie można się połączyć jak nikt inny, ale
'something'@'localhost'
przez gniazdo, oczywiście).Wniosek 3, z edycji 3: Mimo że podałem
-ubill
, uzyskałem dostęp jako anonimowy użytkownik. Wynika to z „zasad sortowania” zalecanych powyżej. Zauważ, że w większości domyślnych instalacji istnieje anonimowy użytkownik bez hasła (i powinien zostać zabezpieczony / usunięty).źródło
DROP USER ''@'localhost';
. Nie są potrzebne do jakiegoś specjalnego celu.Próbować:
źródło
Kiedy uciekłeś
i dostałem ten błąd
mysqld oczekuje, że połączysz się jako
bill@localhost
Spróbuj utworzyć
bill@localhost
Jeśli chcesz połączyć się zdalnie, musisz podać nazwę DNS, publiczny adres IP lub 127.0.0.1 za pomocą protokołu TCP / IP:
Po zalogowaniu uruchom to
USER () informuje o próbie uwierzytelnienia w MySQL
CURRENT_USER () informuje o tym, w jaki sposób możesz uwierzytelnić się w MySQL z tabeli mysql.user
To da ci lepszy wgląd w to, jak i dlaczego wolno ci logować się do mysql. Dlaczego ten pogląd jest ważny? Ma to związek z protokołem zamawiania autoryzacji użytkownika.
Oto przykład: utworzę anonimowego użytkownika na moim pulpicie MySQL
OK, patrz, jak loguję się jako anonimowy użytkownik:
Kolejność uwierzytelniania jest bardzo rygorystyczna. Sprawdza od najbardziej konkretnego do najmniejszego. O tym stylu uwierzytelniania pisałem w DBA StackExchange .
Nie zapomnij w razie potrzeby jawnie wywołać TCP jako protokół klienta mysql.
źródło
'bill'@'localhost'
powinien pasować'bill@%'
, prawda?SELECT USER(),CURRENT_USER();
. Prawie nigdy nie widać anonimowych użytkowników z tych dwóch funkcji, z wyjątkiem naprawdę kiepskich konfiguracji.mysql.user
. W rzeczywistości, jeśli ponownie przeczytasz moją odpowiedź, zobaczysz, że powiedziałem (a właściwie instrukcja mówi), że kolejność sortowania jesthost
najpierw oparta na kolumnie. Dużo pisałeś o tym, jak sprawdzić swoje aktualne dane uwierzytelniające, ale widzę niewiele informacji na temat tego, dlaczego'bill'@'localhost'
nie mogę się zalogować'bill'@'%'
, co jest dzisiejszym pytaniem AFAIK. OP ma prawdopodobnie słabą konfigurację, dlatego dostaje te błędy.--protocol=TCP
był kluczem. Dziękuję Ci bardzo!Bardzo późno na to
Wypróbowałem wszystkie inne odpowiedzi i uruchomiłem wiele różnych wersji,
mysql -u root -p
ale nigdy po prostu nie uruchomiłemmysql -u root -p
I po prostu naciskając
[ENTER]
hasło.Kiedy to zrobiłem, zadziałało. Mam nadzieję, że to komuś pomoże.
źródło
Powiązanym problemem w moim przypadku była próba połączenia za pomocą:
Biała spacja JEST najwyraźniej dozwolona między -u # uname #, ale NIE między -p i # hasłem #
Dlatego potrzebne:
W przeciwnym razie ze spacją między -p mypass mysql przyjmuje „mypass” jako nazwę db
źródło
Podczas pisania
mysql -u root -p
łączysz się z serwerem mysql za pośrednictwem lokalnego gniazda unix.Jednak udzielona dotacja
'bill'@'%'
pasują tylko do połączeń TCP / IP.Jeśli chcesz przyznać dostęp do lokalnego gniazda unix, musisz nadać uprawnienia „bill” @ „localhost”, co, co ciekawe, nie jest tym samym, co „bill ”@'127.0.0.1”
Możesz również połączyć się za pomocą protokołu TCP / IP z klientem wiersza polecenia mysql, aby dopasować uprawnienia, które już przyznałeś, np. Uruchomić
mysql -u root -p -h 192.168.1.123
lub dowolny lokalny adres IP posiadany przez urządzenie.źródło
skip-networking
'bill'@'%'
przez gniazdo w wersji 5.5.Jeśli zapomnisz hasła lub chcesz je zmienić, możesz wykonać następujące czynności:
Bingo! Możesz połączyć swoją bazę danych z nazwą użytkownika i nowym hasłem:
źródło
mysql.server stop
. W moim przypadku nie mogłem zaktualizować kolumny użytkownika, ponieważ jej nie ma; również nie można go utworzyć, ponieważ jest w trybie awaryjnym. Nie obchodzi mnie to, co robię teraz, ale naprawdę doceniam tę odpowiedź formatu z pokazanymi dokładnymi wejściami i wyjściami. dzięki!Zaoszczędź sobie z GŁÓWNEGO bólu głowy ... Twoim problemem może być brak cudzysłowów wokół hasła. Przynajmniej taka była moja sprawa, która mnie odstraszyła na 3 godziny.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Wyszukaj „Oto typowy plik opcji użytkownika:” i zobacz podany tam przykład. Powodzenia i mam nadzieję zaoszczędzić komuś innemu czas.
źródło
Rozwiązaniem jest usunięcie anonimowego (dowolnego) użytkownika!
Ten sam problem napotkałem również na konfiguracji serwera przez kogoś innego. Zwykle nie wybieram utworzenia anonimowego użytkownika po zainstalowaniu MySQL, więc tego nie zauważyłem. Początkowo zalogowałem się jako użytkownik „root” i utworzyłem kilku „normalnych” użytkowników (czyli użytkowników z uprawnieniami tylko na dbs z ich nazwą użytkownika jako prefiksem), następnie wylogowałem się, a następnie sprawdziłem pierwszego normalnego użytkownika. Nie mogłem się zalogować. Ani przez phpMyAdmin, ani przez powłokę. Okazuje się, że winowajcą jest ten użytkownik „Dowolny”.
źródło
Miałem nieco podobny problem - przy pierwszej próbie wejścia do MySQL, ponieważ
root
powiedział mi, że odmówiono dostępu. Okazuje się, że zapomniałem użyćsudo
...Jeśli więc nie uda ci się za
root
pierwszym razem, spróbuj:a następnie wprowadź hasło, to powinno działać.
źródło
Najlepsze rozwiązanie, jakie znalazłem dla siebie, to.
mój użytkownik jest sonarem i za każdym razem, gdy próbuję połączyć się z bazą danych z zewnętrznego lub innego komputera, pojawia się błąd jako
Również, gdy próbuję tego z innej maszyny i za pośrednictwem zadania Jenkinsa, mój adres URL dostępu to
jeśli chcesz połączyć się zdalnie, możesz określić to na różne sposoby w następujący sposób:
Aby uzyskać dostęp do tego adresu URL, wystarczy wykonać następujące zapytanie.
źródło
Okej, nie jestem pewien, ale prawdopodobnie jest to plik my.cnf w katalogu instalacyjnym mysql. Skomentuj ten wiersz, a problem może zostać rozwiązany.
źródło
Chciałem tylko poinformować Cię o niecodziennej sytuacji, że otrzymałem ten sam błąd. Być może to pomoże komuś w przyszłości.
Opracowałem kilka podstawowych widoków, utworzonych w witrynie programistycznej i przeniosłem je na stronę produkcyjną. Później w tym tygodniu zmieniłem skrypt PHP i nagle pojawiły się błędy, że odmówiono dostępu użytkownikowi „local-web-user” @ „localhost”. Obiekt źródła danych nie zmienił się, więc skoncentrowałem się na użytkowniku bazy danych w MySQL, martwiąc się tymczasem ktoś włamał się na moją stronę. Na szczęście reszta witryny wydawała się nietknięta.
Później okazało się, że winowajcami byli poglądy. Nasze transfery obiektowe są wykonywane przy użyciu innego (i zdalnego: admin @ adres-ip) użytkownika niż lokalny użytkownik witryny. Widoki zostały utworzone przy użyciu „admin” @ „ip-address” jako definicji. Domyślnym zabezpieczeniem tworzenia widoku jest
Gdy lokalny użytkownik sieci próbuje użyć widoku, natrafia na brak uprawnień użytkownika definiującego do korzystania z tabel. Po zmianie zabezpieczeń na:
problem został rozwiązany. Rzeczywisty problem był zupełnie inny niż oczekiwano na podstawie komunikatu o błędzie.
źródło
To różnica między:
i
Sprawdź to:
Komenda
dostęp niejawny do „rachunku” @ „localhost”, a NIE do „rachunku” @ „%”.
Brak uprawnień dla „rachunku” @ „localhost”
pojawia się błąd:
rozwiązanie problemu:
źródło
Dzieje się tak również wtedy, gdy hasło zawiera niektóre znaki specjalne, takie jak @, $ itp. Aby uniknąć tej sytuacji, możesz zawrzeć hasło w pojedynczym cudzysłowie:
Lub zamiast tego nie używaj hasła podczas wprowadzania. Pozostaw puste, a następnie wpisz, gdy terminal o to poprosi. To jest zalecany sposób.
źródło
pwgen
. Dzisiaj wygenerowałem nowy dla bazy danych MySQL i jej użytkownika. Niestety hasło zawierało ukośnik odwrotny „\”, którego nie zidentyfikowałem jako źródła błędów (nawet o tym nie pomyślałem). Szukałem godzinami rozwiązania. Po ustawieniu w rozpaczy hasła na „123” logowanie w końcu zadziałało. … Użytkownicy powinni zdawać sobie sprawę, że niektóre znaki specjalne mogą powodować problemy, ponieważ MySQL nie wyświetla żadnych ostrzeżeń dotyczących używania haseł, takich jak na przykład „daiy4ha4in7chooshuiphie \ Th * aew”.Dla mnie ten problem był spowodowany nową funkcją MySQL 5.7.2:
user
wpisy są ignorowane, jeśli ichplugin
pole jest puste.Ustaw na np.
mysql_native_password
Aby je ponownie włączyć:Zobacz informacje o wersji MySQL 5.7.2 w „Notach uwierzytelnienia”.
Z jakiegoś powodu (być może dlatego, że moje skróty hasła w wersji wcześniejszej niż 4.1 zostały usunięte),
mysql_upgrade
skrypt nie ustawił domyślnej wartości wtyczki.Dowiedziałem się, zauważając następujący komunikat ostrzegawczy w
/var/log/mysql/error.log
:Publikuję tę odpowiedź tutaj, aby być może uratować kogoś przed wykorzystaniem tej samej absurdalnej ilości czasu na to, co ja.
źródło
Nie jestem pewien, czy ktokolwiek uzna to za pomocne, ale napotkałem ten sam błąd i szukałem anonimowych użytkowników ... i nie było żadnych. Problem polegał na tym, że konto użytkownika było ustawione na „Wymagaj SSL” - co znalazłem w PHPMyAdmin, przechodząc do Kont użytkowników i klikając Edytuj uprawnienia użytkownika. Gdy tylko odznaczyłem tę opcję, wszystko działało zgodnie z oczekiwaniami!
źródło
Podsumowanie debugowania
Istnieje duża szansa, że w pracy mogłeś napotkać ten problem wiele razy. Ten problem najczęściej pojawiał się w związku z niepoprawnym wprowadzeniem nazwy użytkownika lub hasła. Chociaż jest to jeden z powodów, istnieje wiele innych szans na uzyskanie tego problemu. Czasami wygląda to bardzo podobnie, ale gdy będziesz kopać głębiej, zdasz sobie sprawę z wielu czynników przyczyniających się do tego błędu. W tym poście szczegółowo wyjaśnione zostaną najczęstsze przyczyny i obejście tego problemu.
Możliwe przyczyny:
Jest to najczęstsza przyczyna tego błędu. Jeśli podałeś nieprawidłową nazwę użytkownika lub hasło, na pewno pojawi się ten błąd.
Rozwiązanie:
Rozwiązanie tego rodzaju błędu jest bardzo proste. Wystarczy wpisać poprawną nazwę użytkownika i hasło. Ten błąd zostanie rozwiązany. W przypadku zapomnienia hasła możesz zresetować nazwę użytkownika / hasło. Jeśli zapomnisz hasła do konta administratora / root, istnieje wiele sposobów resetowania / odzyskiwania hasła roota. Opublikuję kolejny post na temat resetowania hasła roota w przypadku, gdy zapomnisz hasło roota.
MySQL zapewnia oparte na hoście ograniczenia dostępu użytkownika jako funkcje bezpieczeństwa. W naszym środowisku produkcyjnym ograniczaliśmy żądanie dostępu tylko do serwerów aplikacji. Ta funkcja jest naprawdę pomocna w wielu scenariuszach produkcyjnych.
Rozwiązanie:
Gdy napotkasz tego typu problem, najpierw sprawdź, czy Twój host jest dozwolony, sprawdzając tabelę mysql.user. Jeśli nie jest zdefiniowany, możesz zaktualizować lub wstawić nowy rekord do tabeli mysql.user. Zasadniczo dostęp z poziomu komputera zdalnego jako użytkownik root jest wyłączony i nie jest to najlepsza praktyka ze względów bezpieczeństwa. Jeśli masz wymagania dotyczące dostępu do serwera z wielu komputerów, daj dostęp tylko do tych komputerów. Lepiej nie używać symboli wieloznacznych (%) i zapewnia uniwersalny dostęp. Pozwól mi zaktualizować tabelę mysql.user, teraz demouser może uzyskać dostęp do serwera MySQL z dowolnego hosta.
Ten typ błędu występuje, gdy użytkownik, do którego próbujesz uzyskać dostęp, nie istnieje na serwerze MySQL.
Rozwiązania:
Gdy napotkasz tego typu problem, po prostu sprawdź, czy użytkownik istnieje w tabeli mysql.user, czy nie. Jeśli rekord nie istnieje, użytkownik nie może uzyskać dostępu. Jeśli ten użytkownik wymaga dostępu, utwórz nowego użytkownika z tą nazwą użytkownika.
Ważne punkty
Nie zaleca się używania symboli wieloznacznych podczas definiowania hosta użytkownika, spróbuj użyć dokładnej nazwy hosta.
Wyłącz logowanie roota ze zdalnego komputera.
Użyj koncepcji użytkownika proxy.
Istnieje kilka innych pojęć związanych z tym tematem, a szczegółowe omówienie tych tematów jest bardzo różnym zakresem tego artykułu. W nadchodzących artykułach zajmiemy się następującymi pokrewnymi tematami.
Mam nadzieję, że ten post pomoże ci naprawić kod błędu MySQL 1045 Odmowa dostępu dla użytkownika w MySQL.
źródło
Mam nadzieję, że nie spowodowałeś więcej szkód, usuwając również użytkownika debian-sys-maint w mysql
Niech twój demon mysql działa normalnie. Uruchom klienta mysql, jak pokazano poniżej
W innym terminalu
cat
plik/etc/mysql/debian.cnf
. Ten plik zawiera hasło; wklej to hasło, gdy zostaniesz o to poproszony.http://ubuntuforums.org/showthread.php?t=1836919
źródło
Odkryłem jeszcze inny przypadek, który pojawia się na powierzchni jako przypadek krawędzi; Mogę eksportować do systemu plików poprzez SELECT INTO .. OUTFILE jako root, ale nie jako zwykły użytkownik. Chociaż może to być kwestia uprawnień, przyjrzałem się temu i nie widzę nic szczególnie oczywistego. Wszystko, co mogę powiedzieć, to to, że wykonanie zapytania jako zwykły użytkownik, który ma wszystkie uprawnienia do danej bazy danych, zwraca błąd odmowy dostępu, który doprowadził mnie do tego tematu. Kiedy znalazłem transkrypcję udanego użycia SELECT INTO… OUTFILE w starym projekcie, zauważyłem, że jestem zalogowany jako root. Rzeczywiście, kiedy zalogowałem się jako root, zapytanie przebiegło zgodnie z oczekiwaniami.
źródło
Aktualizacja: w wersji 8.0.15 (być może w tej wersji)
PASSWORD()
funkcja nie działa.Musisz:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
źródło
Po uruchomieniu
mysql -u bill -p
,localhost
zostanie rozwiązany do OD, ponieważ jest 127.0.0.1 i w/etc/hosts
pliku, jako domyślny127.0.0.1 localhost
istnieje. Zatem mysql interpretuje cię jako coś,bill@localhost
co nie jest przyznanebill@'%'
. Dlategoroot
w wynikuselect host, user from mysql.user;
zapytania istnieją 2 różne rekordy dla użytkownika .Istnieją dwa sposoby rozwiązania tego problemu.
Jednym z nich jest określenie adresu IP, który nie jest rozwiązywany odwrotnie przez
/etc/hosts
plik podczas próby logowania. Na przykład adres IP serwera to10.0.0.2
. Po uruchomieniu poleceniamysql -u bill -p -h 10.0.0.2
będziesz mógł się zalogować. Jeśli napiszeszselect user();
, dostaniesz[email protected]
. Oczywiście, żadna nazwa domeny nie powinna być przetłumaczona na ten adres IP w twoim/etc/hosts
pliku.Po drugie, musisz przyznać dostęp do tej konkretnej nazwy domeny. Bo
bill@localhost
powinieneś wywołać poleceniegrant all privileges on *.* to bill@localhost identified by 'billpass';
. W takim przypadku będziesz mógł zalogować się za pomocą poleceniamysql -u bill -p
. Po zalogowaniuselect user();
polecenie zwracabill@localhost
.Ale to tylko dlatego, że próbujesz zalogować się do serwera mysql na tym samym hoście. Ze zdalnych hostów mysql zachowuje się zgodnie z oczekiwaniami, '%' pozwoli ci się zalogować.
źródło
Rozwiązałem to, usuwając stare wpisy „rachunków” błędnego użytkownika (jest to ważna część: zarówno z mysql.user, jak i mysql.db ), a następnie utworzyłem tego samego użytkownika jako smutnego wcześniej:
Pracował, użytkownik się łączy. Teraz usunę z niej niektóre wcześniejsze uprawnienia :)
źródło
Napotkałem ten sam błąd. Konfiguracja, która nie działała, wygląda następująco:
Edytowana konfiguracja poniżej to ta, która sprawiła, że działała. Zauważ różnicę?
Różnica polega na podwójnym cudzysłowie. Wydają się być dość znaczące w PHP w przeciwieństwie do Javy i mają wpływ, jeśli chodzi o ucieczkę znaków, konfigurowanie adresów URL, a teraz przekazywanie parametrów do funkcji. Są ładniejsze (wiem), ale zawsze używaj pojedynczych cudzysłowów tak często, jak to możliwe, w razie potrzeby można zagnieżdżać je w cudzysłowach.
Ten błąd pojawił się, gdy przetestowałem moją aplikację na komputerze z systemem Linux w przeciwieństwie do środowiska Windows.
źródło
Miałem podobne problemy, ponieważ moje hasło zawiera „;” char łamie moje hasło, kiedy je tworzę w pierwszej chwili. Ostrożnie z tym, jeśli może ci pomóc.
źródło
Może to dotyczyć bardzo niewielu osób, ale proszę bardzo. Nie używaj wykrzyknika
!
w swoim haśle.Zrobiłem i otrzymałem powyższy błąd przy użyciu MariaDB. Kiedy uprościłem to do samych cyfr i liter, zadziałało. Inne znaki, takie jak
@
i$
działają dobrze - użyłem tych znaków u innego użytkownika w tej samej instancji.Piąta odpowiedź pod tym adresem doprowadziła mnie do mojej poprawki.
źródło
W systemie Windows oto sposób rozwiązania:
C:\Program Files,C:\Program Files (x86)
iC:\ProgramData
źródło
Może się to również zdarzyć, jeśli MySQL działa na systemie operacyjnym bez rozróżniania wielkości liter, takim jak Windows.
np. znalazłem, że próba połączenia z bazą danych przy użyciu tych poświadczeń nie powiodła się:
mysql>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Ale udało się:
mysql>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
źródło
Jeśli długości ciągów dbname, nazwa użytkownika, hasło itp. Przekraczają wartości podane na https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , użytkownik może się również nie zalogować, tak jak w moim przypadku.
źródło
Dzisiaj! Rozwiązanie dla :
Nowa instalacja lub aktualizacja Wampserver 3.2.0
Prawdopodobnie
xamp
używaniemariaDB
jako domyślne jest dobre.Wamp
serwer jest dostarczany zmariaDB
i mysql, i instaluje sięmariaDB
domyślnie na porcie 3306 i mysql na 3307, port czasem 3308.Połącz się z
mysql
!Podczas instalacji prosi o użycie
mariaDB
lubMySql
, ale mariaDB jest domyślnie zaznaczone i nie można go zmienić, sprawdzićmysql
opcji i zainstalować.po zakończeniu instalacji oba będą działały
mariaDB
na domyślnym porcie 3306 imysql
na innym porcie 3307 lub 3308.Kliknij prawym przyciskiem myszy
wampserver
ikonę, w której powinien być uruchomiony, w prawym dolnym rogu, przejdź do narzędzi i sprawdź poprawnymysql
port do uruchamiania.I dołącz to do połączenia z bazą danych tak samo jak folowng:
Note :
Używam pdo.Zobacz tutaj po więcej: https://sourceforge.net/projects/wampserver/
źródło