Błąd MySQL 1045 (28000): Odmowa dostępu dla użytkownika "bill" @ "localhost" (używając hasła: tak)

Najpierw pozwolę sobie wspomnieć, że przeszedłem przez wiele sugerowanych pytań i nie znalazłem trafnej odpowiedzi. Oto co robię.

Jestem podłączony do mojej instancji Amazon EC2. Mogę się zalogować za pomocą MySQL root za pomocą tego polecenia:

mysql -u root -p

Następnie utworzyłem nowy rachunek użytkownika z hostem %

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

Przyznano wszystkie uprawnienia userowi bill:

grant all privileges on *.* to 'bill'@'%' with grant option;

Następnie wychodzę z użytkownika root i staram się zalogować bill:

mysql -u bill -p

Wpisałem poprawne hasło i dostałem ten błąd:

1045 (28000): Odmowa dostępu dla użytkownika "bill" @ "localhost" (używając hasła: tak)
Author: Beryllium, 2012-04-24

30 answers

Prawdopodobnie masz anonimowego użytkownika ''@'localhost' lub ''@'127.0.0.1'.

Zgodnie z instrukcją :

Gdy możliwe jest wielokrotne dopasowanie, serwer musi określić, który z ich użyć. Rozwiązuje ten problem w następujący sposób: (...)

  • gdy klient próbuje się połączyć, serwer przegląda wiersze [tabeli mysql.user] w posortowanej kolejności.
  • serwer używa pierwszego wiersza, który pasuje do nazwy hosta klienta i nazwy użytkownika.

(...) Serwer używa reguł sortowania, które porządkują wiersze z najbardziej specyficznymi wartościami hosta najpierw. Dosłowne nazwy hostów [takie jak 'localhost'] i adresy IP są najbardziej szczegółowe.

Stąd taki anonimowy użytkownik "maskowałby" każdego innego użytkownika, takiego jak '[any_username]'@'%' podczas łączenia się z localhost.

'bill'@'localhost' pasuje 'bill'@'%', ale pasuje (np.) ''@'localhost'.

Zalecanym rozwiązaniem jest pozbycie się tego anonimowego użytkownika (zwykle jest to dobra rzecz do zrobienia w każdym razie).


poniższe edycje są w większości nieistotne dla głównego pytania. Są one przeznaczone tylko do odpowiedzi na niektóre pytania podniesione w innych uwagach w tym wątku.

Edit 1

Uwierzytelnianie jako {[8] } przez gniazdo.


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    Welcome to the MySQL monitor (...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    4 rows in set (0.00 sec)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | bill@%         |
    +----------------+----------------+
    1 row in set (0.02 sec)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 row in set (0.00 sec)

Edit 2

Dokładnie taka sama konfiguracja, tylko że ponownie aktywowałem Sieć i teraz tworzę anonimowego użytkownika ''@'localhost'.


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Welcome to the MySQL monitor (...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    Query OK, 0 rows affected (0.00 sec)

    mysql> Bye

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/tmp/mysql-5.5.sock
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Edit 3

To samo sytuacja jak w edycji 2, Teraz podanie hasła anonimowego użytkownika.


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    Welcome to the MySQL monitor (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Wniosek 1, z edycji 1: można uwierzytelnić jako 'bill'@'%' przez gniazdo.

Podsumowanie 2, z edycji 2: to, czy ktoś łączy się przez TCP, czy przez gniazdo, nie ma wpływu na proces uwierzytelniania (z wyjątkiem tego, że nie można połączyć się jak ktokolwiek inny, ale 'something'@'localhost' przez gniazdo, oczywiście).

Podsumowanie 3, od edycji 3: chociaż podałem -ubill, dostałem dostęp jako anonimowy użytkownik. Wynika to z" reguł sortowania " zalecanych powyżej. Zauważ, że w większości domyślnych instalacji, istnieje anonimowy użytkownik bez hasła (i powinien być zabezpieczony / usunięty).

 456
Author: RandomSeed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 14:26:29

Try:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
 147
Author: Edgar Aviles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 20:39:16

When you ran

mysql -u bill -p

And got this error

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Mysqld oczekuje połączenia jako bill@localhost

Spróbuj utworzyć bill@localhost

CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
Jeśli chcesz połączyć się zdalnie, musisz podać nazwę DNS, publiczny adres IP lub 127.0.0.1 używając protokołu TCP / IP:
mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

Po zalogowaniu, uruchom to

SELECT USER(),CURRENT_USER();

USER () informuje o próbie uwierzytelnienia w MySQL

CURRENT_USER () raportuje, jak można było uwierzytelnianie w MySQL z mysql.user table

To da ci lepszy wgląd w to, jak i dlaczego możesz zalogować się do mysql. Dlaczego warto wiedzieć o tym widoku? Ma to związek z protokołem zamawiania uwierzytelniania użytkownika.

Oto przykład: stworzę anonimowego użytkownika na moim pulpicie MySQL

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)

mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| x       | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
|         | %         |
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql>

OK watch me login as anonymous user:

C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user(),current_user();
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| rol@localhost | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

Kolejność uwierzytelniania jest bardzo rygorystyczna. Sprawdza od najbardziej specyficznych do najmniej. pisałem o tym stylu authentiation w dba StackExchange.

Nie zapomnij jawnie wywołać TCP jako protokołu dla klienta mysql, gdy jest to konieczne.

 86
Author: RolandoMySQLDBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:42:36

Super późno na to

Próbowałem wszystkich innych odpowiedzi i uruchomiłem wiele różnych wersji mysql -u root -p, ale nigdy nie po prostu uruchomiłem


mysql -u root -p

I naciśnięcie [ENTER] hasła.


Kiedy to zrobiłem, zadziałało. Mam nadzieję, że to komuś pomoże.
 29
Author: garrettmac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-03 23:46:03

Kiedy wpisujesz mysql -u root -p, łączysz się z serwerem mysql przez lokalne Gniazdo unix.

Jakkolwiek grant, który dałeś, 'bill'@'%' pasuje Tylko do połączeń TCP/IP wystarczająco ciekawie.

Jeśli chcesz przyznać dostęp do lokalnego gniazda Uniksa, musisz przyznać 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 linii poleceń mysql, aby dopasować uprawnienia, które już przyznałeś, np. uruchom mysql -u root -p -h 192.168.1.123 lub dowolny lokalny adres IP, który ma Twoja skrzynka.

 21
Author: nos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-26 17:39:13

Powiązany problem w moim przypadku to próba połączenia za pomocą:

mysql -u mike -p mypass

Białe spacje są najwyraźniej dozwolone pomiędzy-u # uname#, ale Nie pomiędzy-p i # hasło #

Dlatego potrzebne:

mysql -u mike -pmypass

Inaczej z białą spacją pomiędzy-p mypass mysql przyjmuje 'mypass' jako nazwę db

 20
Author: mstram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 18:19:28

Jeśli zapomnisz hasła lub chcesz je zmodyfikować.Możesz wykonać następujące kroki:

1: zatrzymaj swój mysql

[root@maomao ~] # service mysqld stop
Zatrzymanie MySQL: [OK]

2 :Użyj "--skip-grant-tables", aby ponownie uruchomić mysql

[root@mcy400~] # mysqld_safe --skip-grant-tables
[root@cy400 ~] # uruchamianie demona mysqld z bazami danych z / var/lib / mysql

3: Otwórz nowe okno i wprowadź mysql-u root

[root@cy400 ~]# mysql - u root
Witamy w MySQL monitor. Polecenia kończą się znakiem; lub \G.

4: ZMIEŃ bazę danych użytkowników

Mysql> use mysql
Odczyt informacji o tabelach w celu uzupełnienia nazw tabel i kolumn Możesz wyłączyć tę funkcję, aby uzyskać szybsze uruchomienie z-A Zmiana bazy danych

5 : modyfikuj swoje hasło nowe hasło powinno być wprowadzone w "() "

Mysql > update user set password = password ('root123') where user= 'root';
Zapytanie OK, 3 wiersze dotknięte (0.00 sec)
Wiersze pasujące: 3 zmienione: 3 Warnings: 0

6: flush

Mysql> flush privileges;

7: quit

Mysql> quit
Bye

8: restart mysql

[root@cy400~] # service mysqld restart;
Zatrzymanie MySQL: [OK]
Uruchamianie MySQL: [OK]

Bingo! Możesz połączyć swoją bazę danych za pomocą nazwy użytkownika i nowego hasła:

[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye
 20
Author: Li Yingjun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-21 00:34:14

Oszczędź sobie bólu głowy... Twoim problemem może być to, że brakuje cytatów wokół hasła. Przynajmniej to moja sprawa zatrzymała mnie na 3 godziny.

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

Http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Wyszukaj "Oto typowy plik opcji użytkownika:" i zobacz przykład, który tam podaje. Powodzenia i mam nadzieję, że oszczędzę komuś jeszcze trochę czasu.

 18
Author: mimoralea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 19:28:26

Miałem nieco podobny problem - przy pierwszej próbie wejścia do MySQL, jako root, powiedział mi Odmowa dostępu. Okazało się, że zapomniałem użyć sudo...

Więc, jeśli nie uda się na root pierwszej próbie, spróbuj:

sudo mysql -u root -p

A następnie wprowadź hasło, to powinno działać.

 15
Author: Maverick Meerkat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-16 05:53:38

Rozwiązaniem jest usunięcie anonimowego (dowolnego) użytkownika!

Napotkałem również ten sam problem na konfiguracji serwera przez kogoś innego. Normalnie nie wybieram tworzenia 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 (aka użytkowników z uprawnieniami tylko na dbs z ich nazwą użytkownika jako prefiksem), a następnie wylogowałem się, a następnie udał się do weryfikacji pierwszego normalnego użytkownika. Nie mogłem się zalogować. Ani przez phpMyAdmin, ani przez shell. Okazuje się, że winowajcą jest ten "każdy" użytkownik.

 13
Author: fevangelou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 20:00:47

Najlepsze rozwiązanie, jakie znalazłem dla siebie jest.

Mój użytkownik to sonar i za każdym razem, gdy próbuję połączyć się z bazą danych z zewnętrznego lub innego komputera, dostaję błąd jako

ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)

Również, ponieważ próbuję tego z innej maszyny i poprzez zadanie Jenkinsa mój URL dostępu jest

alm-lt-test.xyz.com

Jeśli chcesz połączyć się zdalnie, możesz określić go na różne sposoby w następujący sposób:

mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP

Aby uzyskać dostęp do tego adresu URL, wystarczy wykonać następujące zapytanie.

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';
 8
Author: Abhijeet Kamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-18 14:33:59

To różnica między:

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

I

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

Sprawdź to:

mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user          | host                       |
+---------------+----------------------------+
| bill          | %                          | <=== created by first
| root          | 127.0.0.1                  |
| root          | ::1                        |
| root          | localhost                  |
| bill          | localhost                  | <=== created by second
+---------------+----------------------------+

Komenda

mysql -u bill -p

Dostęp niejawny do 'bill' @ 'localhost', a nie do 'bill'@'%'.

Nie ma uprawnień dla 'bill' @ 'localhost'

Pojawia się błąd:

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Rozwiązanie problemu:

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

grant all privileges on . to 'bill'@'localhost' with grant option;
 6
Author: Gerd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 17:32:03

Ok, Nie jestem pewien, ale to pewnie mój.plik cnf w katalogu instalacyjnym mysql jest winowajcą. Skomentuj tę linię, a problem może zostać rozwiązany.

bind-address = 127.0.0.1
 5
Author: Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-25 09:37:17

Nie wiem, czy ktoś inny uzna to za pomocne, ale napotkałem ten sam błąd i szukałem wszędzie anonimowych użytkowników...i nie było żadnych. Problem polegał na tym, że konto użytkownika zostało ustawione na "Wymagaj SSL" - co znalazłem w PHPMyAdmin, przechodząc do kont użytkowników i klikając Edytuj uprawnienia dla użytkownika. Jak tylko odznaczyłem tę opcję, wszystko działało zgodnie z oczekiwaniami!

 5
Author: Alan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 02:53:27

Chciałem tylko poinformować, że w nietypowych okolicznościach otrzymałem ten sam błąd. Może to komuś pomoże w przyszłości.

Opracowałem kilka podstawowych widoków, stworzonych w miejscu rozwoju i przeniesionych do miejsca produkcji. Później w tym tygodniu zmieniłem skrypt PHP i nagle pojawiły się błędy, że dostęp został zablokowany dla użytkownika "local-web-user" @ "localhost". Obiekt datasource nie zmienił się, więc skupiłem się na użytkowniku bazy danych w MySQL, martwiąc się w międzyczasie ktoś zhakował moją stronę. Na szczęście reszta strony wydawała się nienaruszona.

Później okazało się, że to poglądy były winowajcą. Nasze transfery obiektów są wykonywane za pomocą innego (i zdalnego: admin @ ip-address)użytkownika niż lokalny użytkownik witryny. Tak więc widoki zostały utworzone z'admin'@' ip-address ' jako definer. Domyślne zabezpieczenie tworzenia widoku to
SQL SECURITY DEFINER

Gdy local-web-user próbuje użyć widoku, potyka się o brak uprawnień definera do używania tabel. Raz bezpieczeństwo zostało zmienione na:

SQL SECURITY INVOKER

Problem został rozwiązany. Rzeczywisty problem był zupełnie inny niż przewidywano na podstawie komunikatu o błędzie.

 4
Author: Erik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 13:28:21

Dzieje się tak również wtedy, gdy hasło zawiera znaki specjalne, takie jak@, $itp. Aby uniknąć tej sytuacji, można zawinąć hasło w pojedyncze cudzysłowy:

$ mysql -usomeuser -p's0mep@$$w0Rd'

Lub zamiast tego nie używaj hasła podczas wprowadzania. Pozostaw go pusty, a następnie wpisz go, gdy terminal zapyta. Jest to zalecany sposób.

$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
 4
Author: Pranit More,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-08 06:44:42

Dla mnie ten problem był spowodowany nową funkcją MySQL 5.7.2: wpisy user są ignorowane jeśli ich pole plugin jest puste.

Ustaw na np. mysql_native_password aby je odtworzyć:

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

Zobacz uwagi do wydania MySQL 5.7.2, w sekcji "Uwagi do uwierzytelniania".

Z jakiegoś powodu (może dlatego, że moje hashe hasła sprzed wersji 4.1 zostały usunięte), skrypt mysql_upgrade nie ustawił domyślnej wartości wtyczki.

Dowiedziałem się, zauważając następujący komunikat ostrzegawczy w /var/log/mysql/error.log:

[Warning] wpis użytkownika ' foo ' @ ' % ' ma pustą wartość wtyczki. Użytkownik zostanie zignorowany i nikt już nie będzie mógł się z nim zalogować.

Zamieszczam tę odpowiedź tutaj, aby być może uratować kogoś przed używaniem tej samej absurdalnej ilości czasu na to, co ja.

 4
Author: maxelost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-18 23:43:10

Update: w wersji 8.0.15 (może ta wersja) funkcja PASSWORD() nie działa.

Musisz:

  1. upewnij się, że najpierw zatrzymałeś MySQL.
  2. uruchom serwer w trybie awaryjnym z obejściem uprawnień: sudo mysqld_safe --skip-grant-tables
  3. Login: mysql -u root
  4. mysql > UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. mysql > FLUSH PRIVILEGES;
  6. mysql> exit;
  7. Login again: mysql -u root
  8. mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
 4
Author: Mohamed Jaleel Nazir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 04:03:46

Podsumowanie Debugowania

  • Sprawdź błąd literówki: nazwa użytkownika lub hasło.
  • Sprawdź nazwę hosta i porównaj go z mysql.Nazwa hosta tabeli użytkownika.
  • Sprawdź czy użytkownik istnieje czy nie.
  • Sprawdź, czy host zawiera adres IP lub nazwę hosta.

istnieje duża szansa, że napotkałeś ten problem wiele razy w swojej pracy. Ten problem pojawił się u mnie najczęściej z powodu nieprawidłowego wprowadzenia nazwy użytkownika lub hasła. Choć jest to jeden z powodów, istnieje wiele innych szans, że możesz uzyskać ten problem. Czasami wygląda to bardzo podobnie, ale gdy kopiesz głębiej, zdasz sobie sprawę z wielu czynników przyczyniających się do tego błędu. Ten post szczegółowo wyjaśni większość typowych powodów i obejdzie, aby rozwiązać ten problem.

Możliwe przyczyny:

  • Przypadek 1: Błąd literówki: nazwa użytkownika lub hasło.

jest to najczęstsza przyczyna tego błędu. Jeśli błędnie wpisałeś nazwę użytkownika lub hasło, na pewno pojawi się ten błąd.

Rozwiązanie:

rozwiązanie tego typu błędu jest bardzo proste. Wystarczy wpisać poprawną nazwę użytkownika i hasło. Ten błąd zostanie rozwiązany. Jeśli zapomnisz hasła, możesz zresetować nazwę użytkownika/hasło. Jeśli zapomnisz hasła do konta administratora / roota, istnieje wiele sposobów na zresetowanie / odzyskanie hasła roota. Opublikuję kolejny post o tym, jak zresetować hasło roota w przypadku, gdy zapomnisz hasła roota.

  • przypadek 2: dostęp z niewłaściwego hosta.

MySQL zapewnia ograniczenie dostępu użytkownika oparte na Hostie jako funkcję bezpieczeństwa. W naszym środowisku produkcyjnym ograniczaliśmy żądanie dostępu tylko do serwerów aplikacji. Ta funkcja jest bardzo pomocna w wielu scenariuszach produkcyjnych.

Rozwiązanie:

gdy napotkasz tego typu problem, najpierw sprawdź, czy twój host jest dozwolone lub nie, sprawdzając mysql.tabela użytkowników. Jeśli nie jest zdefiniowany, możesz zaktualizować lub wstawić nowy rekord do mysql.tabela użytkowników. Ogólnie rzecz biorąc, dostęp jako użytkownik root ze zdalnego komputera jest wyłączony i nie jest to najlepsza praktyka, ze względu na obawy dotyczące bezpieczeństwa. Jeśli masz wymagania dostępu do serwera z wielu maszyn, daj dostęp tylko do tych maszyn. Lepiej nie używać symboli wieloznacznych ( % ) i daje Uniwersalny dostęp. Pozwól mi zaktualizować mysql.tabeli Użytkowników, TERAZ demouser może uzyskać dostęp Serwer MySQL z dowolnego hosta.

  • Przypadek 3: Użytkownik nie istnieje na serwerze.

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 mysql.user table or not. Jeśli rekord nie istnieje, użytkownik nie może uzyskać dostępu. Jeśli istnieje wymóg dostępu do tego użytkownika, utwórz nowego Użytkownika z tym nazwa użytkownika.

  • przypadek 4: Połączenie hostów numerycznych i nazwowych.

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 i wchodzenie w szczegóły tych tematów jest bardzo różny zakres ten artykuł. W nadchodzących artykułach przyjrzymy się następującym powiązanym tematom.

  • co zrobić, jeśli zapomniałeś hasła roota w serwerze MySQL.
  • problemy z uprawnieniami dostępu MySQL i tabele związane z użytkownikami.
  • zabezpieczenia MySQL z najlepszymi praktykami.

mam nadzieję, że ten post pomoże Ci naprawić kod błędu MySQL 1045 Access denied dla użytkownika w MySQL.

 3
Author: Abhijit Jagtap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 07:32:36

Mam nadzieję, że nie wyrządziłeś większej szkody 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

mysql -u debian-sys-maint -p

W innym terminalu, cat Plik /etc/mysql/debian.cnf. Ten plik zawiera hasło; wklej je, gdy pojawi się monit o jego podanie.

Http://ubuntuforums.org/showthread.php?t=1836919

 3
Author: ysk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-21 01:05:28

Odkryłem kolejny 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 zapis udanego użycia of SELECT INTO ... OUTFILE w starym projekcie zauważyłem, że jestem zalogowany jako root. Oczywiście, gdy zalogowałem się jako root, zapytanie działało zgodnie z oczekiwaniami.

 3
Author: David A. Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-27 07:12:32

Miałem podobne problemy, ponieważ moje hasło zawiera znak";", który łamie moje hasło podczas tworzenia go w pierwszej chwili. Ostrożnie z tym, jeśli może Ci pomóc.

 2
Author: Genaut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-16 10:58:15

To może dotyczyć bardzo niewielu ludzi, ale oto idzie. Nie używaj wykrzyknika ! w haśle.

Zrobiłem i dostałem powyższy błąd używając MariaDB. Kiedy uprościłem to tylko do liczb i liter, zadziałało. Inne znaki, takie jak @ i $ działają dobrze - użyłem tych znaków w innym użytkowniku na tej samej instancji.

Piąta odpowiedź pod tym adresem doprowadziła mnie do mojej poprawki.

 2
Author: Chiwda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 01:35:19

W dzisiejszych czasach! Rozwiązanie dla:

to strona internetowa, w której można znaleźć informacje na temat plików cookie. (using password: YES);

Wampserver 3.2.0 nowa instalacja lub aktualizacja

Prawdopodobnie xamp Używanie mariaDB jako domyślnego jest dobrze.

Wamp serwer jest dostarczany z mariaDB i mysql, a instalowanie mariaDB jako domyślne na porcie 3306 i mysql na porcie 3307, czasami 3308.

Połącz się z mysql!

Przy instalacji prosi o użyj mariaDB lub MySql, ale mariaDB jest zaznaczone jako domyślne i nie można go zmienić, zaznacz opcję mysql i zainstaluj.

Po zakończeniu instalacji oba będą uruchamiane mariaDB na domyślnym porcie 3306 i mysql na innym porcie 3307 lub 3308.

Kliknij prawym przyciskiem myszy na ikonie wampserver gdzie jej runing powinien znajdować się w prawym dolnym rogu, goto tools i zobacz poprawny port runing mysql.

I dołącz go do połączenia z bazą danych tak samo jak folowng :

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port

$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Note : używam pdo.

Zobacz tutaj po więcej: https://sourceforge.net/projects/wampserver/

 2
Author: Dlk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-30 22:31:51

Kiedy biegniesz mysql -u bill -p, localhost jest rozdzielone na twoje ip, ponieważ jest to 127.0.0.1 i w Twoim pliku /etc/hosts, jako domyślne 127.0.0.1 localhost istnieje. Tak więc mysql interpretuje cię jako bill@localhost, co nie jest przypisane do bill@'%'. Dlatego istnieją 2 różne rekordy dla root użytkownika w wyniku select host, user from mysql.user; zapytania.

Istnieją dwa sposoby rozwiązania tego problemu.

Jeden określa adres ip, który nie jest odwrotnie rozwiązywany przez plik /etc/hosts podczas próby zalogowania się. Na przykład adres IP serwera to 10.0.0.2. Po uruchomieniu polecenie mysql -u bill -p -h 10.0.0.2, będziesz mógł się zalogować. Jeśli wpiszesz select user();, otrzymasz [email protected]. Oczywiście żadna nazwa domeny nie powinna być rozwiązana na ten adres ip w pliku /etc/hosts.

Po drugie, musisz przyznać dostęp dla tej konkretnej nazwy domeny. Dla bill@localhost należy wywołać komendę grant all privileges on *.* to bill@localhost identified by 'billpass';. W takim przypadku będziesz mógł zalogować się za pomocą polecenia mysql -u bill -p. Po zalogowaniu polecenie select user(); zwraca bill@localhost.

Ale to tylko dlatego, że próbujesz zalogować się na serwer mysql na tym samym hoście. Od zdalnych hostów, mysql zachowuje się zgodnie z oczekiwaniami, ' % ' pozwoli Ci się zalogować.

 0
Author: Shnkc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-03 08:00:37

Rozwiązałem to usuwając stare wpisy buggy 'ego użytkownika' bill ' (to jest ważna część: oba z mysql.user i mysql.db ), następnie stworzył tego samego Użytkownika co sad przed:

FLUSH PRIVILEGES;
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
FLUSH PRIVILEGES;

Działa, użytkownik łączy się. Teraz usunę z niego jakieś previlegie:)

 0
Author: dxvargas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-03 04:06:44

Napotkałem ten sam błąd. Konfiguracja, która nie działała jest następująca:

define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

Edytowana konfiguracja poniżej jest Tym, który ją uruchomił. Zauważyłeś różnicę?

define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

Różnica polega na podwójnych cudzysłowach. Wydają się być dość znaczące w PHP w przeciwieństwie do Javy i mają wpływ, jeśli chodzi o znaki ucieczki, konfigurowanie adresów URL, a teraz przekazywanie parametrów do funkcji. Są ładniejsze (wiem) ale zawsze używaj pojedynczych cudzysłowów jak najwięcej wtedy w razie potrzeby można zagnieżdżać podwójne cudzysłowy.

Ten błąd pojawił się podczas testowania mojej aplikacji na Linuksie w przeciwieństwie do środowiska Windows.

 0
Author: Raymond Wachaga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 00:17:41

W systemie Windows, oto jak rozwiązać:

1045 (28000): Odmowa dostępu dla użytkownika 'root'@ 'localhost' (użycie hasła: nie)
  1. Odinstaluj mysql z Panelu sterowania
  2. Usuń folder MySql z C:\Program Files,C:\Program Files (x86) i C:\ProgramData
  3. Install mysql
 0
Author: Sanjay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 01:40:43

Może się to zdarzyć również wtedy, gdy MySQL działa na systemie operacyjnym bez rozróżniania wielkości liter, takim jak Windows.

Np. okazało się, że próba połączenia się z bazą danych za pomocą 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

1045 (28000): Odmowa dostępu dla użytkownika 'specialuser' @ '10.0.1.113' (użycie hasła: tak)

Ale udało się:

Mysql> grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

Wpisz hasło:

 0
Author: kguest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 05:42:37

OS: windows

Mój komunikat o błędzie to:

W tym celu należy skontaktować się z Działem Obsługi Klienta pod numerem telefonu + 48 22 222 22 22, a następnie skontaktować się z Działem Obsługi Klienta pod numerem telefonu + 48 22 222 22 22.]}

Powodem jest to, że nie otworzyłem cmd z uprawnieniami administratora .

Więc moim rozwiązaniem było otwarcie cmd jako administrator, potem zadziałało.

 0
Author: yilin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 05:54:52