MySQL-Benutzer-DB hat keine Kennwortspalten - Installation von MySQL unter OSX

172

Ich versuche, das MySQL-Root-Passwort zu ändern.

Was ich getan habe, ist unten.

  1. Installieren Sie MySql-5.7.6 ~ .dmg (Community Server) und Workbench.
  2. Schalten Sie den Server in den OSX-Systemeinstellungen aus.
  3. Greifen Sie mit der Konsole auf MySQL zu. Der Befehl warmysqld_safe --skip-grant
  4. Ausführen update user set password=password('1111') where user='root';und eine Fehlermeldung erhalten -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

Zu Ihrer Information, ich habe es getan use mysql;. Also habe ich die Abfrage in der Benutzertabelle ausgewählt und festgestellt, dass die Kennwortspalte tatsächlich nicht vorhanden ist.

Es ist sehr komisch. Ist es möglich, dass die ursprüngliche Benutzertabelle keine Kennwortspalte enthält?

Wie kann ich ein Passwort ändern, das nicht existiert?

Vielen Dank für Ihre Antwort: D.

Juneyoung Oh
quelle
Jetzt teste ich erneut und kann ohne PW auf MySQL zugreifen :( Ist es in Ordnung, die Benutzertabelle zu ändern (ich meine Benutzertabelle ändern und Kennwortspalte über Abfrage hinzufügen)?
Juneyoung Oh
SET PASSWORD für root @ localhost = password ('new-pass') - funktioniert für alle MySQL-Versionen
SIDU
UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Weil das Feld 'Passwort' von mysql entfernt und durch authentication_string ersetzt wurde. Hinweis: Die MySQL-Funktion PASSWORD ('Passwort') basiert auf dem MD5-Algorithmus, der vor langer Zeit mithilfe des Angriffs am Geburtstag geknackt wurde. Die Verwendung gibt also ein falsches Sicherheitsgefühl, da ein Angreifer die von ihm erzeugten Hashes einfach in eine öffentliche Website wie hashkiller.co.uk/md5-decrypter.aspx einfügen und Ihr Nur- Text-Passwort abrufen kann.
Dr. Deo

Antworten:

557

In MySQL 5.7 wurde das Kennwortfeld im Tabellenfeld mysql.user entfernt. Jetzt lautet der Feldname 'authentication_string'.

Wählen Sie zuerst die Datenbank:

mysql>use mysql;

Und dann zeigen Sie die Tabellen:

mysql>show tables;

Sie finden die Benutzertabelle, jetzt sehen wir uns ihre Felder an:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

Überraschung! Es gibt kein Feld mit dem Namen 'Passwort', das Passwortfeld heißt 'Authentifizierungszeichenfolge'. Also mach einfach das:

update user set authentication_string=password('1111') where user='root';

Jetzt wird alles in Ordnung sein.

Im Vergleich zu MySQL 5.6 sind die Änderungen recht umfangreich: Was ist neu in MySQL 5.7?

nodejh
quelle
42
Sie, mein Herr, haben meinen Tag gemacht.
Bisonfan95
3
Diese Methode funktioniert auch mit der Einschränkung --skip-grant-tables beim Starten von mysqld. Da Sie ein anonymer Benutzer sind, können Sie die Passwörter nicht ändern mit: ALTER USER 'root' @ 'localhost' IDENTIFIZIERT DURCH 'neues Passwort' ALTER USER 'root' @ '*' IDENTIFIZIERT DURCH 'neues Passwort' Es wird geben Sie haben einen anonymen Benutzerberechtigungsfehler.
Bisonfan95
Was ist, wenn es überhaupt keine Tische gibt?
Sahand
1
Ändern des Passwort-Feldnamens ... eine Entscheidung, die so vielen Menschen so viele Probleme
bereitete
2
Wenn Sie das Root-Passwort in Schritt 2) zurücksetzen, ändern Sie auch das Auth-Plugin in mysql_native_password: use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa
26

Dieser Fehler tritt auf, wenn Sie das Passwort bei der Installation nicht festgelegt haben, in diesem Fall die MySQL mit dem Unix-Socket-Plugin .

Wenn Sie jedoch den Plugin-Link aus den Einstellungen löschen (Tabelle mysql.user), tritt ein anderes Problem auf. Dies behebt das Problem nicht und führt zu einem weiteren Problem. Um den gelöschten Link zu reparieren und das Passwort ("PWD") festzulegen, gehen Sie wie folgt vor:

1) Laufen Sie mit --skip-grant-tableswie oben beschrieben.

Wenn es nicht funktioniert, fügen Sie die Zeichenfolge skip-grant-tablesim Abschnitt [mysqld]von hinzu /etc/mysql/mysql.conf.d/mysqld.cnf. Dann mach es sudo service mysql restart.

2) Führen Sie mysql -u root -pdann aus (ändern Sie "PWD"):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit

dann sudo service mysql restart. Überprüfen Sie : mysql -u root -p.

Bevor Sie restartdiese Zeichenfolge aus der Datei mysqld.cnf entfernen, wenn Sie sie dort festlegen.

bl79
quelle
Genau richtig! Benötigtes Plugin = "mysql_native_password" und die Flush-Berechtigungen. Konnte dies mit keinem anderen Beispiel zum Laufen bringen. Danke bl79!
TheRealWebGuy
Ich bekommeERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
Chance Smith
Ihre Antwort ist großartig! Dies ist eine Antwort, die mir während des 6-stündigen Kampfes geholfen hat
AlexNikonov
plugin = "mysql_native_password" Erledigt den Rick für mich
Joyner
Funktioniert perfekt für mich
Mayank Sharma
23

Eine Falle, in die ich geraten bin, ist, dass es jetzt kein Passwortfeld gibt. Es wurde umbenannt in:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

Sollte jetzt sein:

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';

John C.
quelle
16

Verwenden Sie den ALTER USERBefehl, anstatt zu versuchen, eine USERZeile zu aktualisieren . Beachten Sie, dass es möglicherweise mehr als einen Root-Benutzer gibt, da Benutzerentitäten auch von dem Computer qualifiziert werden, von dem aus sie eine Verbindung herstellen

https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

Beispielsweise.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 
O. Jones
quelle
2
Für MySQL 5.7.9 muss ich den BENUTZER ÄNDERN, um richtig zu funktionieren. Vielen Dank.
Shin
Wir mussten \ g gefolgt von dem obigen Befehl verwenden. Verwenden von MySql 5.7.12. ty
bobsouza
Diese Antwort funktionierte nur für mich unter Ubuntu 16.04, MySQL 5.7.19;
A1Gard
Haben sie den Platzhalter von @ in * geändert? Grr ... jetzt habe ich mehr Fragen als als ich hierher kam.
Pguardiario
4

Es hat nur bei mir funktioniert, als ich nach den hier genannten Befehlen "gespült" habe. Hier ist die vollständige Liste der Befehle, die ich verwendet habe:

Frühere Antworten funktionieren möglicherweise nicht für spätere MySQL-Versionen. Versuchen Sie diese Schritte, wenn frühere Antworten für Sie nicht funktionierten:

1- Klicken Sie auf das Wamp-Symbol> MySQL> MySQL-Konsole

2- Schreiben Sie nacheinander die folgenden Befehle

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit
Amgad
quelle
4

Danke für Ihre Hilfe. Nur für den Fall, dass die Leute immer noch Probleme haben, versuchen Sie dies.

Für MySQL Version 5.6 und darunter

Haben Sie Ihr Mac OS X 'ROOT'-Passwort vergessen und müssen es zurücksetzen? Befolgen Sie diese 4 einfachen Schritte:

  1.  Stoppen Sie den mysqld-Server. Dies kann normalerweise über 'Systemeinstellungen'> MySQL> 'MySQL-Server stoppen' erfolgen.
  2.  Starten Sie den Server im abgesicherten Modus mit Berechtigungsumgehung. Von einem Terminal aus:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  In einem neuen Terminalfenster:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Stoppen Sie den mysqld-Server erneut und starten Sie ihn im normalen Modus neu.

Für MySQL Version 5.7 und höher

  1.  Stoppen Sie den mysqld-Server. In der Regel kann dies von ab erfolgen 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Starten Sie den Server im abgesicherten Modus mit Berechtigungsumgehung. Von einem Terminal aus:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  In einem neuen Terminalfenster:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Stoppen Sie den mysqld-Server erneut und starten Sie ihn im normalen Modus neu.
eli
quelle
Dies hilft mir bei der Installation von MySQL <5.7
Ankit Agarwal
3

Für dieses Problem habe ich eine einfache und unhöfliche Methode verwendet, den Feldnamen in Passwort umzubenennen. Der Grund dafür ist, dass ich die Mac Navicat Premium-Software im visuellen Betriebsfehler verwende: Unbekannte Spalte 'Passwort' in 'Feldliste', die Software selbst verwendet Passwort, so dass ich nicht einfach bedienen kann. Daher roote ich in der Datenbankbefehlszeile, führe aus

Use mysql;

Und ändern Sie dann den Feldnamen:

ALTER TABLE user CHANGE authentication_string password text;

Immerhin normal.

luyishisi
quelle
0

Grundursache: root hat kein Passwort, und Ihre Python-Connect-Anweisung sollte dies widerspiegeln.

Um den Fehler 1698 zu beheben, ändern Sie Ihr Python-Verbindungskennwort in ''.

Hinweis: Durch manuelles Aktualisieren des Benutzerpassworts wird das Problem nicht behoben. Es wird weiterhin der Fehler 1698 angezeigt

Jameskchau
quelle
0

Denken Sie daran, dass das Passwort auch nach dem Neustart von MySQL wie folgt weiter festgelegt werden muss

SET PASSWORD = PASSWORD('root');
Pravin
quelle