Zugriff für Benutzer 'root' @ 'localhost' verweigert (mit Passwort: YES) - Keine Berechtigungen?

110

Ich erhalte ständig diesen Fehler.

Ich verwende mySQL Workbench und stelle fest, dass die Schema-Berechtigungen von root null sind. Es gibt überhaupt keine Privilegien.

Ich habe plattformübergreifende Probleme, für die mein Server verwendet wird, und dies war plötzlich ein Problem.

[email protected] hat anscheinend viel Zugriff, aber ich bin als dieser angemeldet, aber es wird sowieso nur localhost zugewiesen - localhost hat keine Berechtigungen.

Ich habe ein paar Dinge zu erledigen wie FLUSH HOSTS, FLUSH PRIVILEGES, usw. , aber habe keinen Erfolg davon oder im Internet zu finden.

Wie kann ich den Root-Zugriff zurückbekommen? Ich finde das frustrierend, denn wenn ich mich umsehe, erwarten die Leute, dass Sie "Zugriff haben", aber ich habe keinen Zugriff, so dass ich nicht in die Befehlszeile gehen kann oder irgendetwas und GRANTmich selbst irgendetwas.

Beim Laufen SHOW GRANTS FOR rootbekomme ich dafür eine Gegenleistung:

Fehlercode: 1141. Für den Benutzer 'root' auf dem Host '%' ist keine solche Berechtigung definiert.

Verfolgungsjagd
quelle
Führen Sie SHOW GRANTS FOR rooteine Abfrage aus und veröffentlichen Sie das Ergebnis in Ihrer Frage.
NobleUplift
Sie versuchen, mit mySQL Workbench vom lokalen Host oder von einem anderen Host aus auf die Datenbank zuzugreifen?
Andy Jones
Starten Sie den Server mit --skip-grant-table neu und melden Sie sich mit einem beliebigen Benutzer an und gewähren Sie die vollen Berechtigungen, um den Server ohne die oben genannte Option zu
rooten
@AndyJones Nein, es befindet sich auf einem dedizierten Server, den ich verwende.
Chase
@vidyadhar Es tut mir leid, ich bin nicht sicher, wo ich das tun würde?
Chase

Antworten:

50

Verwenden Sie die Anweisungen zum Zurücksetzen des Root-Passworts. Anstatt das Root-Passwort zurückzusetzen, werden wir einen Datensatz zwangsweise in die Tabelle mysql.user einfügen

Verwenden Sie dies stattdessen in der Init-Datei

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Andy Jones
quelle
1
Es tut mir leid, Andy, aber wenn ich zu Schritt 6 komme, stoße ich immer wieder auf ein Problem. Da ich einen Installationsassistenten verwendet habe, würde ich verwenden. "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 Alles ist dort, wo es sein soll, und was Sie oben haben, habe ich entsprechend in die Datei eingefügt. Ich habe den Dienst auch gestoppt. Ich bekomme gerade diese Ausgabe: prntscr.com/1ilxau Und alles (Plugins) heruntergefahren. Wirklich verwirrend.
Chase
2
Führen Sie dies als Administrator aus?
Andy Jones
1
Bei meiner Dummheitsüberraschung war ich es nicht. Nachdem ich es war, bekam ich diese prntscr.com/1imcnj - Das erste Mal, als ich es in ihren eigenen Zeilen (aus Einfügen) tat, dann setzte ich alles in eine Zeile. Es tut mir leid, dass dies für mich nur so verwirrend ist, nicht für den SQL-Experten an sich.
Chase
16
es gibt: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'Fehler. @ AndyJones
Alper
1
Ich
erhalte
128

Wenn Sie das gleiche Problem in MySql 5.7 haben. +:

Access denied for user 'root'@'localhost'

Dies liegt daran, dass MySql 5.7 standardmäßig die Verbindung mit dem Socket zulässt, was bedeutet, dass Sie nur eine Verbindung herstellen sudo mysql. Wenn Sie SQL ausführen:

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

dann wirst du es sehen:

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

Um die Verbindung mit root und Kennwort zu ermöglichen, aktualisieren Sie die Werte in der Tabelle mit dem folgenden Befehl:

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

Führen Sie dann den Befehl select erneut aus und Sie werden sehen, dass er sich geändert hat:

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

Und das ist es. Sie können diesen Prozess ausführen, nachdem Sie den sudo mysql_secure_installationBefehl ausgeführt und ausgeführt haben.

Verwenden Sie für Mariadb

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

Passwort setzen. Mehr bei https://mariadb.com/kb/en/set-password/

KeitelDOG
quelle
1
Wirklich danke während der Verbindung Einrichtung in Linux Mint
Lova Chittumuri
Aktualisieren von, auth_socketum mysql_native_passwordmein Problem zu beheben. Danke dir!
18.
1
Das war absolut ärgerlich und eine riesige Zeitverschwendung. Ich wünschte, sie hätten das während gefragt mysql_secure_installation. Vielen Dank für diese Antwort.
PatPeter
Dies war auch hilfreich stackoverflow.com/questions/2995054/…
Abeer Sul
42

Es mochte mein Benutzerrecht nicht, also SUDO ich es. (in bash << sudo Benutzer und Passwort festlegen) (dies gibt den Benutzernamen von root an und setzt das Passwort auf nichts) (auf Mac)

sudo mysql -uroot -p
Dan Kaiser
quelle
27

Versuchen Sie die folgenden Befehle

~$ 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
quelle
11
In MySQL 5.7 wurde das Kennwortfeld im Tabellenfeld mysql.user entfernt, jetzt lautet der Feldname 'authentication_string'.
Rumid
Für neuere Versionen von MySQL haben sie den Namen der Passwortspalte als authentication_string geändert
Ramesh Maharjan
sudo mysqld_safeHabe mir das /var/run/mysqld for UNIX socket file don't existsdann nach mkdir -p /var/run/mysqldund sudo chown -R mysql:mysql /var/run/mysqld/es hat funktioniert und den Daemon gestartet.
Benzotenma
1
FEHLER 2002 (HY000): Über Socket '/var/run/mysqld/mysqld.so
Mostafa
19

für die Leute, die unter Fehler in MySQL 5.7+ Version konfrontiert sind -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Neues Terminal öffnen

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc wird gestoppt

  3. sudo mysqld_safe --skip-grant-tables & Dadurch werden alle Berechtigungen auf Grant-Ebene übersprungen und die MySQL im abgesicherten Modus gestartet. Manchmal blieb der Prozess nur aufgrund von hängen

grep: Schreibfehler: Pipe defekt 180102 11:32:28 mysqld_safe Protokollierung in '/var/log/mysql/error.log'.

Drücken Sie einfach Strg + Z oder Strg + C, um den Vorgang zu unterbrechen und zu beenden

  1. mysql -u root

Willkommen beim MySQL-Monitor. Befehle enden mit; oder \ g. Ihre MySQL-Verbindungs-ID lautet 2 Server-Version: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle und / oder verbundene Unternehmen. Alle Rechte vorbehalten.

Oracle ist eine eingetragene Marke der Oracle Corporation und / oder ihrer verbundenen Unternehmen. Andere Namen können Marken ihrer jeweiligen Eigentümer sein.

Geben Sie 'help' ein. oder '\ h' um Hilfe. Geben Sie '\ c' ein, um die aktuelle Eingabeanweisung zu löschen.

  1. mysql> use mysql;

Lesen von Tabelleninformationen zum Vervollständigen von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert

  1. mysql> update user set authentication_string=password('password') where user='root'; Abfrage OK, 4 Zeilen betroffen, 1 Warnung (0,03 Sek.) Übereinstimmende Zeilen: 4 Geändert: 4 Warnungen: 1

  2. mysql> flush privileges; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

  3. mysql> quit Tschüss

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

..180102 11:37:12 mysqld_safe mysqld aus der PID-Datei /var/run/mysqld/mysqld.pid wurde beendet. * MySQL Community Server 5.7.8-rc wird gestoppt arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc wird gestartet

  1. mysql -u root -p

    Passwort eingeben:

    Willkommen beim MySQL-Monitor. Befehle enden mit; oder \ g. Ihre MySQL-Verbindungs-ID lautet 2 Server-Version: 5.7.8-rc MySQL Community Server (GPL)

Nach der Version MySQL 5.7+ wurde das Spaltenkennwort durch den Namen authentication_string aus der Tabelle mysql.user ersetzt.

Ich hoffe, diese Schritte helfen jedem, danke.

ArifMustafa
quelle
15

Ich habe Ubuntu 18 verwendet und einfach MySQL (Passwort: root) mit den folgenden Befehlen installiert.

sudo apt install mysql-server
sudo mysql_secure_installation

Als ich versuchte, mich mit dem normalen Ubuntu-Benutzer anzumelden, warf ich dieses Problem auf.

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

Aber ich konnte mich über den Superuser bei MySQL anmelden. Mit den folgenden Befehlen konnte ich mich über einen normalen Benutzer anmelden.

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

Dann sollten Sie sich mit dem normalen Konto bei MySQL anmelden können.

Geben Sie hier die Bildbeschreibung ein

Nirojan Selvanathan
quelle
8

Eine einfache Möglichkeit, das Root-Passwort auf Linux-Systemen zurückzusetzen:

sudo dpkg-reconfigure mysql-server-5.5

Kasse einige andere Gründe für den Zugriff verweigert:

https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html

Parth mehta
quelle
1
Finden Sie Ihre Version mit "Mysql-Server suchen" und führen Sie den Befehl entsprechend aus
Punnerud
5

Wenn dieser Fehler in Workbench angezeigt wird, Sie sich jedoch vom Terminal aus anmelden können, führen Sie die folgenden Schritte aus.

Melden Sie sich zunächst einfach mit Ihrem aktuellen Passwort an:

sudo mysql -u root -p

Ändern Sie dann Ihr Passwort, da ein Passwort mit geringer Stärke manchmal zu Fehlern führt.

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

FLUSH PRIVILEGES;

Beenden Sie dann einfach und melden Sie sich erneut mit Ihrem neuen Passwort an:

quit

sudo mysql -u root -p

Wenn Sie sich erfolgreich angemeldet haben, geben Sie den folgenden Befehl ein:

use mysql;

Es sollte eine Meldung wie "Datenbank geändert" angezeigt werden. Geben Sie dann Folgendes ein:

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

Nach diesem Typ:

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

Geben Sie dann Folgendes ein:

FLUSH PRIVILEGES;

Dann einfach beenden:

quit

Versuchen Sie nun, sich mit Ihrem neuen Passwort in Ihrer WORKBENCH anzumelden. Hoffe es wird funktionieren. Danke dir.

Tanmoy Bhowmick
quelle
4

Bei der Installation von Testlink auf einem Ubuntu-Server trat dieses Problem auf. Ich habe diese Schritte ausgeführt

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

Stoppen Sie nun die Instanz und starten Sie erneut, dh

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Shridhar S Chini
quelle
2

Der einfachste Weg, das Root-Passwort zurückzusetzen, ist:

  • Starten Sie die Option mysqld --skip-grant-tables neu . Dies ermöglicht jedem, eine Verbindung ohne Passwort und mit allen Berechtigungen herzustellen. Da dies unsicher ist, möchten Sie möglicherweise --skip-grant-tables in Verbindung mit --skip-network verwenden, um zu verhindern, dass Remoteclients eine Verbindung herstellen.

  • Stellen Sie mit diesem Befehl eine Verbindung zum mysqld-Server her:

  • shell> mysql Geben Sie die folgenden Anweisungen im mysql-Client aus. Ersetzen Sie das Passwort durch das Passwort, das Sie verwenden möchten.

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

  • Stoppen Sie den Server und starten Sie ihn normal neu (ohne die Optionen --skip-grant-tables und --skip-network).

Quelle MySQL-Dokumentation und persönliche Erfahrung:

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

Aneesh Vijendran
quelle
0

Probieren Sie die folgenden Schritte aus, um dieses Problem zu beheben:

  1. Öffnen Sie das Terminal / die Eingabeaufforderung und navigieren Sie zum Ordner bin des MySQL-Installationsordners. Führen Sie dann den Befehl aus mysqld --console.
  2. Wenn Sie sehen können, wird diese Zeile 171010 14:58:22 [Note] --secure-file-privauf NULL gesetzt. Vorgänge zum Importieren und Exportieren von Daten werden deaktiviert, nachdem der obige Befehl an der Eingabeaufforderung ausgeführt wurde.
  3. Dann müssen Sie überprüfen, ob die mysqld entweder von der Windows-Firewall oder einem anderen Programm blockiert wird.
  4. Wenn es von der Windows-Firewall blockiert wird, müssen Sie die Blockierung aufheben und die Einstellungen speichern.
  5. So entsperren Sie das mysqldodermysql Anwendung Gehen Sie wie folgt vor:
    1. Gehen Sie zur Eingabeaufforderung und geben Sie ein wf.msc , um die Firewall-Einstellungen zu öffnen.
    2. Klicken Sie auf App oder Funktion über die Windows-Firewall zulassen.
    3. Überprüfen Sie, ob mysqldoder mysqldInstanzen in der Liste verfügbar sind, und aktivieren Sie das Kontrollkästchen für die öffentliche und private Domäne, und speichern Sie die Einstellungen.
  6. Kehren Sie zum Ordner bin zurück und wiederholen Sie den Befehl aus Schritt 1 erneut.
  7. Es sollte gut funktionieren und keine Fehler zeigen.

Es sollte jetzt möglich sein, die MySQL-Konsole ohne Probleme auszuführen!

srinivas krithvik
quelle
0

Ich habe das gleiche Problem mit der nächsten SQL und dem Neustart des MySQL-Servers behoben:

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
quelle
0

Ich habe mehrere Stunden an Access Denied for User 'root' @ 'localhost' gearbeitet (mit Passwort: YES). Ich habe folgende Lösung gefunden:

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
quelle
0

Ich glaube nicht, dass Sie dem --init-fileParameter entkommen müssen :

"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

Sollte sein:

"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

Jordanien
quelle
0

Für das oben genannte Problem sollte Ihr Kennwort im System mit dem Kennwort übereinstimmen, das Sie im Programm übergeben haben, da es beim Ausführen des Programms das Kennwort des Systems überprüft, da Sie als Benutzer root angegeben haben, sodass Sie einen Fehler und gleichzeitig den Datensatz erhalten wird nicht aus der Datenbank gelöscht.

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());
        }
    }
}

Behalten Sie Ihr Systemkennwort als jacob234 bei und führen Sie den Code aus.

Koyel Sharma
quelle
0

Ich habe das gleiche Problem behoben, indem ich Workbench als Administrator ausgeführt habe.

... Ich denke, es liegt an Einschränkungen für Firmencomputer, in meinem Fall ...

Igor Šćepanović
quelle
0

Bei mir war das gleiche Problem, aber es wurde verursacht, weil ich den MySQL-Server auf 32 (Bit) verwendete und die Workbench auf 64 (Bit) -Version lief. Der Server und die Workbench müssen dieselbe Version haben.

xpress

xpress
quelle
0

Für mich benutzte ich MYSQLWorkbench und der Port war 3306 MAMP mit 8889

Abdullah Tahan
quelle
0

Ich hatte das gleiche Problem, als ich versuchte, eine MySQL-Datenbank mit der Laravel-Anwendung zu verbinden. Ich möchte empfehlen, bitte überprüfen Sie das Passwort für den Benutzer. Das MySQL-Passwort sollte keine Sonderzeichen wie # , & usw. enthalten.

Mohit Ramani
quelle
Bei bluehost wurde das Problem durch Entfernen von Sonderzeichen aus dem Kennwort behoben.
Mena