Odmowa dostępu dla użytkownika „root” @ „localhost” (używając hasła: TAK) - Brak uprawnień?

111

Ciągle otrzymuję ten błąd.

Używam MySQL Workbench iz tego, co odkryłem, wynika, że ​​uprawnienia roota do schematu są zerowe. Nie ma żadnych przywilejów.

Mam problemy na różnych platformach, na których jest używany mój serwer, i to był nagły problem.

[email protected] najwyraźniej ma dużo dostępu, ale jestem zalogowany jako taki, ale i tak przypisuje to po prostu do localhost - localhost nie ma żadnych uprawnień.

Zrobiłem kilka rzeczy, jak FLUSH HOSTS, FLUSH PRIVILEGESitp, ale nie znalazły sukces z tego lub internecie.

Jak mogę odzyskać uprawnienia roota? Uważam to za frustrujące, ponieważ kiedy się rozglądam, ludzie oczekują, że będziesz „mieć dostęp”, ale ja nie mam dostępu, więc nie mogę wejść do wiersza poleceń ani nic, a GRANTja nic.

Podczas biegu SHOW GRANTS FOR roototrzymuję w zamian:

Kod błędu: 1141. Nie ma takiego nadania zdefiniowanego dla użytkownika „root” na hoście „%”

Pościg
źródło
Uruchom SHOW GRANTS FOR rootzapytanie, opublikuj wynik w swoim pytaniu.
NobleUplift
Próbujesz uzyskać dostęp do bazy danych z lokalnego hosta lub z innego hosta za pomocą MySQL Workbench?
Andy Jones
restart serwera z --skip-grant-table i logowania z dowolnym użytkownikiem i daje pełne uprawnienia root i serwer ponownie rozpocząć bez powyższej opcji
Vidyadhar
@AndyJones nie, jest na dedykowanym serwerze, którego używam.
Chase
@vidyadhar Przepraszam, nie jestem pewien, gdzie bym to zrobił?
Chase

Odpowiedzi:

52

Skorzystaj z instrukcji resetowania hasła roota - ale zamiast resetować hasło roota, będziemy wymuszać WSTAWIANIE rekordu do tabeli mysql.user

W pliku init użyj tego zamiast tego

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Andy Jones
źródło
1
Przepraszam Andy, ale kiedy przechodzę do kroku 6, ciągle napotykam problem. Ponieważ użyłem kreatora instalacji, używałbym "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt Wszystko jest tam, gdzie powinno być, a to, co masz powyżej, odpowiednio umieściłem w pliku. Zatrzymałem również usługę. Po prostu otrzymuję ten wynik: prntscr.com/1ilxau I wszystko (wtyczki) zamknięte. Naprawdę zagmatwane.
Chase
2
prowadzisz to jako administrator?
Andy Jones
1
Zdziwiła mnie moja głupota. Kiedy byłem, dostałem to prntscr.com/1imcnj - Za pierwszym razem zrobiłem to na ich własnych liniach (z wklejania), a potem umieściłem to wszystko w jednej linii. Przykro mi, że jest to dla mnie tak zagmatwane, a nie dla eksperta sql per se.
Chase
16
to daje: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'błąd. @AndyJones
alper
1
Otrzymuję: Nieznana kolumna 'Hasło' w 'liście pól'
sricheta ruj
130

Jeśli masz ten sam problem w MySql 5.7. +:

Access denied for user 'root'@'localhost'

dzieje się tak dlatego, że MySql 5.7 domyślnie zezwala na połączenie z gniazdem, co oznacza, że ​​po prostu łączysz się z sudo mysql. Jeśli używasz sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;

wtedy to zobaczysz:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Aby umożliwić połączenie z rootem i hasłem, zaktualizuj wartości w tabeli poleceniem:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

Następnie uruchom ponownie polecenie wyboru, a zobaczysz, że się zmieniło:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

I to wszystko. Możesz uruchomić ten proces po uruchomieniu i wykonaniu sudo mysql_secure_installationpolecenia.

W przypadku mariadb użyj

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

ustawić hasło. Więcej na https://mariadb.com/kb/en/set-password/

KeitelDOG
źródło
1
Naprawdę dziękuję podczas połączenia Ustanowienie w linux mint
Lova Chittumuri
Aktualizacja z auth_socketdo mysql_native_passwordrozwiązała mój problem. Dziękuję Ci!
olore
1
To była absolutnie irytująca próba rozgryzienia i ogromna strata czasu. Szkoda, że ​​nie pytali o to podczas mysql_secure_installation. Dziękuję bardzo za tę odpowiedź.
PatPeter
było to również pomocne stackoverflow.com/questions/2995054/ ...
Abeer Sul
42

Nie podobał mi się mój przywilej użytkownika, więc SUDO to. (w bash << sudo ustaw użytkownika i hasło) (daje to nazwę użytkownika root i ustawia hasło na nic) (na Macu)

sudo mysql -uroot -p
Dan Kaiser
źródło
27

Wypróbuj następujące polecenia

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 
aashish
źródło
11
W MySQL 5.7 pole hasła w tabeli mysql.user zostało usunięte, teraz nazwa pola to „authentication_string”.
Rumid
dla nowszej wersji mysql zmienili nazwę kolumny hasła na authentication_string
Ramesh Maharjan
sudo mysqld_safedostałem to /var/run/mysqld for UNIX socket file don't exists, potem po mkdir -p /var/run/mysqldi sudo chown -R mysql:mysql /var/run/mysqld/zadziałało i uruchomiłem demona.
kenzotenma
1
BŁĄD 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/run/mysqld/mysqld.so
Mostafa
19

dla osób, które napotykają poniższy błąd w wersji mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Otwórz nowy terminal

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc jest zatrzymany

  3. sudo mysqld_safe --skip-grant-tables & spowoduje to pominięcie wszystkich uprawnień na poziomie i uruchomienie mysql w trybie awaryjnym Czasem proces utknął tylko z powodu

grep: błąd zapisu: uszkodzony potok 180102 11:32:28 mysqld_safe Logowanie do „/var/log/mysql/error.log”.

Po prostu naciśnij Ctrl + Z lub Ctrl + C, aby przerwać i zakończyć proces

  1. mysql -u root

Witamy w monitorze MySQL. Polecenia kończą się na; lub \ g. Twój identyfikator połączenia MySQL to 2 Wersja serwera: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle i / lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone.

Oracle jest zastrzeżonym znakiem towarowym firmy Oracle Corporation i / lub jej podmiotów zależnych. Inne nazwy mogą być znakami towarowymi odpowiednich właścicieli.

Wpisz „pomoc”; lub „\ h” w celu uzyskania pomocy. Wpisz „\ c”, aby wyczyścić bieżącą instrukcję wejściową.

  1. mysql> use mysql;

Odczytywanie informacji z tabeli w celu uzupełnienia nazw tabel i kolumn Możesz wyłączyć tę funkcję, aby przyspieszyć uruchamianie za pomocą -A

Baza danych została zmieniona

  1. mysql> update user set authentication_string=password('password') where user='root'; Zapytanie OK, dotyczy 4 wierszy, 1 ostrzeżenie (0,03 s) Pasujące wiersze: 4 Zmienione: 4 Ostrzeżenia: 1

  2. mysql> flush privileges; Zapytanie OK, dotyczy 0 wierszy (0,00 s)

  3. mysql> Do quit widzenia

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld z pliku pid /var/run/mysqld/mysqld.pid zakończony. * MySQL Community Server 5.7.8-rc jest zatrzymany arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc jest uruchomiony

  1. mysql -u root -p

    Wprowadź hasło:

    Witamy w monitorze MySQL. Polecenia kończą się na; lub \ g. Twój identyfikator połączenia MySQL to 2 Wersja serwera: 5.7.8-rc MySQL Community Server (GPL)

po wersji mysql 5.7+ hasło kolumny zostało zastąpione nazwą authentication_string z tabeli mysql.user.

mam nadzieję, że te kroki pomogą każdemu, dzięki.

ArifMustafa
źródło
15

Używałem ubuntu 18 i po prostu zainstalowałem MySQL (hasło: root) za pomocą następujących poleceń.

sudo apt install mysql-server
sudo mysql_secure_installation

Kiedy próbowałem zalogować się z normalnym użytkownikiem Ubuntu, rzucał mi ten problem.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Ale udało mi się zalogować do MySQL przez superużytkownika. Korzystając z następujących poleceń, mogłem zalogować się przez zwykłego użytkownika.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

Wtedy powinieneś być w stanie zalogować się do MySQL za pomocą zwykłego konta.

wprowadź opis obrazu tutaj

Nirojan Selvanathan
źródło
5

Jeśli otrzymujesz ten błąd w Workbench, ale możesz zalogować się z terminala, wykonaj następujące kroki.

Najpierw zaloguj się przy użyciu aktualnego hasła:

sudo mysql -u root -p

Następnie zmień hasło, ponieważ posiadanie hasła o niskiej sile czasami powoduje błąd.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

Następnie po prostu wyjdź i zaloguj się ponownie, używając nowego hasła:

quit

sudo mysql -u root -p

Po pomyślnym zalogowaniu wpisz polecenie:

use mysql;

Powinien pokazać komunikat typu „Zmieniono bazę danych”, a następnie wpisać:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

Po tym typie:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

Następnie wpisz:

FLUSH PRIVILEGES;

Następnie po prostu wyjdź:

quit

Teraz spróbuj zalogować się przy użyciu nowego hasła w WORKBENCH. Mam nadzieję, że to zadziała. Dziękuję Ci.

Tanmoy Bhowmick
źródło
4

Napotkałem ten problem podczas instalacji Testlink na serwerze Ubuntu, wykonałem następujące kroki

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

Teraz zatrzymaj instancję i zacznij od nowa, tj

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Shridhar S Chini
źródło
2

Najłatwiejszym sposobem zresetowania hasła roota jest:

  • zrestartuj mysqld --skip-grant-table opcja . Dzięki temu każdy może łączyć się bez hasła i ze wszystkimi uprawnieniami. Ponieważ jest to niebezpieczne, możesz chcieć użyć --skip-grant-table w połączeniu z --skip-networking, aby uniemożliwić zdalnym klientom połączenie.

  • Połącz się z serwerem mysqld za pomocą tego polecenia:

  • shell> mysql Wydaj następujące instrukcje w kliencie mysql. Zastąp hasło hasłem, którego chcesz używać.

  • mysql> UPDATE mysql.user SET Password = PASSWORD ('MyNewPass') -> WHERE User = 'root'; mysql> UPRAWNIENIA FLUSH;

  • Zatrzymaj serwer, a następnie zrestartuj go normalnie (bez opcji --skip-grant-table i --skip-networking).

Dokumentacja źródłowa MySQL i osobiste doświadczenia:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html

Aneesh Vijendran
źródło
1

Rozwiązałem ten sam problem, uruchamiając Workbench jako administrator.

... chyba z powodu ograniczeń na firmowych komputerach, w moim przypadku ...

Igor Šćepanović
źródło
0

Wypróbuj następujące kroki, aby rozwiązać ten problem:

  1. Otwórz terminal / wiersz poleceń i przejdź do folderu bin folderu instalacyjnego MySQL. Następnie uruchom polecenie mysqld --console.
  2. Jeśli widzisz, ta linia 171010 14:58:22 [Note] --secure-file-privjest ustawiona na NULL. Operacje związane z importem i eksportem danych są wyłączane po wykonaniu powyższego polecenia z wiersza poleceń.
  3. Następnie musisz sprawdzić, czy mysqldjest zablokowany przez Zaporę systemu Windows lub inny program.
  4. Jeśli jest zablokowany przez Zaporę systemu Windows, musisz go odblokować i zapisać ustawienia.
  5. Aby odblokować aplikację mysqldlub mysql, wykonaj poniższe czynności:
    1. Przejdź do wiersza poleceń i wpisz, wf.mscaby otworzyć ustawienia zapory.
    2. Kliknij Zezwalaj aplikacji lub funkcji przez Zaporę systemu Windows.
    3. Zaznacz wystąpienia mysqldlub mysqldsą dostępne na liście i zaznacz pole wyboru domeny, publicznej i prywatnej, a następnie zapisz ustawienia.
  6. Wróć do folderu bin i ponownie spróbuj wykonać polecenie z kroku 1.
  7. Powinien działać dobrze i nie wyświetlać żadnych błędów.

Teraz powinno być możliwe bezproblemowe uruchomienie konsoli MySQL!

srinivas krithvik
źródło
0

Rozwiązałem ten sam problem, używając następnego sql i restartując serwer MySQL:

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';
Oleksandr Tsurika
źródło
0

Pracowałem nad Odmową dostępu dla użytkownika 'root' @ 'localhost' (używając hasła: TAK) przez kilka godzin, znalazłem następujące rozwiązanie,

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections
Veera Prasad
źródło
0

Myślę, że nie musisz uciekać od --init-fileparametru:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

Powinien być:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt

Jordania
źródło
0

dla powyższego problemu twoje hasło w systemie powinno być zgodne z hasłem podanym w programie, ponieważ po uruchomieniu programu sprawdza hasło systemowe, ponieważ podałeś roota jako użytkownik, więc daje błąd i jednocześnie rekord nie jest usuwany z bazy danych.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Zachowaj hasło systemowe ur jako jacob234, a następnie uruchom kod.

Koyel Sharma
źródło
0

U mnie był ten sam problem, ale był on spowodowany, ponieważ korzystałem z serwera mysql na wersji 32 (bitowej), a Środowisko pracy działało na wersji 64 (bitowej). serwer i środowisko robocze muszą mieć tę samą wersję.

xpress

xpress
źródło
0

U mnie używałem MYSQLWorkbench, a portem był 3306 MAMP z 8889

Abdullah Tahan
źródło
0

Z tym samym problemem miałem do czynienia, gdy próbowałem połączyć się z bazą danych MySQL za pomocą aplikacji Laravel. Chciałbym polecić, sprawdź hasło użytkownika. Hasło MySQL nie powinno zawierać znaków specjalnych, takich jak # , & , itp ...

Mohit Ramani
źródło
W przypadku bluehost usunięcie znaków specjalnych z hasła faktycznie rozwiązało problem.
Mena