Il DB utente di MySQL non ha colonne di password - Installazione di MySQL su OSX


172

Sto cercando di cambiare la password di root di MySql.

Quello che ho fatto è sotto.

  1. Installa MySql-5.7.6 ~ .dmg (Community Server) e workbench.
  2. Disattiva il server sulle preferenze di Sistema OSX.
  3. Accedi a MySql con console. Il comando eramysqld_safe --skip-grant
  4. Esegui update user set password=password('1111') where user='root';e ricevi un messaggio di errore -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

Cordiali saluti, l'ho fatto use mysql; . Quindi ho selezionato la query sulla tabella degli utenti e ho trovato che la colonna della password in realtà non esiste.

È molto strano. È possibile che la tabella utenti originale non abbia una colonna password?

Come posso cambiare la password, che non esiste?

Grazie per la risposta: D


Ora eseguo nuovamente il test e posso accedere a MySQL senza PW :( Va bene cambiare (intendo modificare la tabella degli utenti e aggiungere la colonna della password tramite query) tabella degli utenti?
Juneyoung Oh

SET PASSWORD per root @ localhost = password ('new-pass') - funziona per qualsiasi versione mysql
SIDU

UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Perché il campo "Password" è stato rimosso da mysql e sostituito con autenticazione_stringa. Nota: che la funzione mysql PASSWORD ('password') si basa sull'algoritmo MD5 che è stato crackato molto tempo fa usando l'attacco del giorno della nascita. Quindi usarlo dà un falso senso di sicurezza perché un utente malintenzionato può semplicemente incollare gli hash che produce in un sito Web pubblico come hashkiller.co.uk/md5-decrypter.aspx e recuperare la password in chiaro.
Dott. Deo,

Risposte:


556

In MySQL 5.7, il campo password nel campo tabella mysql.user è stato rimosso, ora il nome del campo è 'authentication_string'.

Scegli prima il database:

mysql>use mysql;

E quindi mostra le tabelle:

mysql>show tables;

Troverai la tabella degli utenti, ora vediamo i suoi campi:

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)

Sorpresa! Non esiste un campo denominato "password", il campo password è denominato "autenticazione_stringa". Quindi, basta fare questo:

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

Ora andrà tutto bene.

Rispetto a MySQL 5.6, le modifiche sono piuttosto estese: Novità di MySQL 5.7


42
Signore, mi hai reso felice.
Bisonfan95,

3
Questo metodo funziona anche con la restrizione --skip-grant-tables all'avvio di mysqld. Dato che sei un utente anonimo non puoi cambiare le password con: ALTER USER 'root' @ 'localhost' IDENTIFICATO DA 'new-password' ALTER USER 'root' @ '*' IDENTIFICATO DA 'new-password' hai un errore di autorizzazioni utente anonimo.
Bisonfan95,

cosa succede se non ci sono tavoli?
Sahand,

1
cambiando il nome del campo password ... una decisione che ha causato così tante persone così tanti problemi ...
talsibony,

2
Quando si reimposta la password di root al passaggio 2), modificare anche il plug-in di autenticazione 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

Questo errore si verifica se non è stata impostata la password durante l'installazione, in questo caso il mysql utilizza il plug-in unix socket .

Ma se si elimina il collegamento del plug-in dalle impostazioni (tabella mysql.user) ci saranno altri problemi. Questo non risolve il problema e crea un altro problema. Per correggere il collegamento eliminato e impostare la password ("PWD"), procedere come segue:

1) Corri con --skip-grant-tablescome detto sopra.

Se non funziona, aggiungi la stringa skip-grant-tablesnella sezione [mysqld]di /etc/mysql/mysql.conf.d/mysqld.cnf. Allora fallo sudo service mysql restart.

2) Esegui mysql -u root -p, quindi (cambia "PWD"):

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

quit

allora sudo service mysql restart. Dai un'occhiata:mysql -u root -p .

Prima di restartrimuovere quella stringa dal file mysqld.cnf, se la imposti lì.


Spot on! Plug-in necessario = "mysql_native_password" e i privilegi di scarico. Impossibile farlo funzionare con nessun altro esempio. Grazie bl79!
TheRealWebGuy

RicevoERROR 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 il

la tua risposta è fantastica! questa è una risposta che mi ha aiutato a combattere per 6 ore
AlexNikonov,

plugin = "mysql_native_password" Fatto per me
Joyner il

Funziona perfettamente per me
Mayank Sharma,

23

Una trappola in cui mi sono imbattuto è che non esiste un campo password ora, è stato rinominato così:

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

Ora dovrebbe essere:

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


16

Utilizzare il ALTER USERcomando anziché tentare di aggiornare aUSER riga. Tieni presente che potrebbe esserci più di un utente "root", poiché le entità utente sono qualificate anche dalla macchina da cui si connettono

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

Per esempio.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 

2
Per MySQL 5.7.9, devo ALTER USER per funzionare correttamente. Grazie.
stinco

abbiamo avuto bisogno dell'utente \ g seguito dal comando sopra. Utilizzo di MySql 5.7.12. ty
bobsouza,

questa risposta ha funzionato solo per me, su Ubuntu 16.04, mysql 5.7.19;
A1Gard

Hanno cambiato il carattere jolly da @ a *? Grr ... ora ho più domande rispetto a quando sono venuto qui.
pguardiario,

4

Ha funzionato con me solo quando ho "arrossato" dopo i comandi menzionati qui. Ecco l'elenco completo dei comandi che ho usato:

Le risposte precedenti potrebbero non funzionare per le versioni successive di mysql. Prova questi passaggi se le risposte precedenti non hanno funzionato per te:

1- Fare clic sull'icona wamp> mysql> console mysql

2- scrivere i seguenti comandi, uno per uno

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

4

Grazie per l'aiuto. Nel caso in cui le persone abbiano ancora problemi, prova questo.

Per MySQL versione 5.6 e precedenti

Hai dimenticato la password "ROOT" di Mac OS X e devi ripristinarla? Segui questi 4 semplici passaggi:

  1.  Arresta il server mysqld. In genere questo può essere fatto da "Preferenze di sistema"> MySQL> "Arresta MySQL Server"
  2.  Avviare il server in modalità provvisoria con bypass privilegi Da un terminale:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  In una nuova finestra del terminale:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Arrestare di nuovo il server mysqld e riavviarlo in modalità normale.

Per MySQL versione 5.7 e successive

  1.  Arresta il server mysqld. In genere questo può essere fatto da 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Avviare il server in modalità provvisoria con bypass privilegi Da un terminale:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  In una nuova finestra del terminale:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Arrestare di nuovo il server mysqld e riavviarlo in modalità normale.

Questo mi aiuta durante l'installazione di mysql <5.7
Ankit Agarwal

3

Per questo problema, ho usato un metodo semplice e scortese, ho rinominato il nome del campo in password, il motivo è che utilizzo il software mac navicat premium nell'errore di operazione visiva: colonna sconosciuta 'password' in 'campo Elenco', il il software stesso utilizza la password in modo che non possa funzionare facilmente. Pertanto, eseguo il root nella riga di comando del database, corri

Use mysql;

E quindi modificare il nome del campo:

ALTER TABLE user CHANGE authentication_string password text;

Dopo tutto normale.


0

Causa principale: root non ha password e l'istruzione python connect dovrebbe rispecchiarla.

Per risolvere l'errore 1698, modifica la password di Python Connect in "".

nota: l'aggiornamento manuale della password dell'utente non risolverà il problema, verrà comunque visualizzato l'errore 1698


0

ricorda che la password deve essere impostata ulteriormente anche dopo aver riavviato mysql come di seguito

SET PASSWORD = PASSWORD('root');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.