Errore MySQL:: "Accesso negato per l'utente" root "@" localhost "


264

$ ./mysqladmin -u root -p ' redacted '
Immettere la password:

mysqladmin: errore di connessione al server "localhost" non riuscito:
"Accesso negato per l'utente" root "@" localhost "(utilizzando la password: SÌ)"

Come posso risolvere questo problema?



1
@clearlight Non è la stessa domanda, questo post è un problema con mysqladmin che guadagna super privilegi in mysql, l'altro post è un problema con una semplice connessione da socket.
e-info128,

Prova a rimuovere se esiste un ~/.my.cnffile.
e-info128

11
So che questo è vecchio, ma voglio dirlo per i futuri visitatori. Non inserire la tua password mysql, specialmente per root, nel comando stesso, altrimenti verrà memorizzata nella cronologia della shell. Basta lasciare l' -popzione da sola e mysql richiederà una password.
Scotty C.

Risposte:


358
  1. Apri e modifica /etc/my.cnfo /etc/mysql/my.cnf, a seconda della distribuzione.
  2. Aggiungi skip-grant-tablessotto[mysqld]
  3. Riavvia Mysql
  4. Ora dovresti essere in grado di accedere a mysql usando il comando seguente mysql -u root -p
  5. Correre mysql> flush privileges;
  6. Imposta nuova password per ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Torna a /etc/my.cnf e rimuovi / commenta skip-grant-tables
  8. Riavvia Mysql
  9. Ora sarai in grado di accedere con la nuova password mysql -u root -p

6
Ciao, ho avuto lo stesso problema. Ho fatto quanto sopra e risolve il problema, ma ogni volta che riavvio CentOS, devo ripetere tutti i passaggi (ho ricevuto il messaggio: Accesso negato per l'utente 'root' @ 'localhost' (usando la password: NO) - quando eseguo il comando mysql (o qualsiasi comando sql) e lo faccio più e più volte come sopra ad ogni riavvio
Eitan

19
Peccato che questo non funzioni con MariaDB:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER 'root'@'localhost' IDENTIFIED BY 'NewPassword'' at line 1
Philipp Ludwig il

11
Ho scoperto che funziona @PhilippLudwig L' set PASSWORD FOR 'root'@'localhost' = PASSWORD('root');ho fatto dopo il passaggio 5. Ecco come appariva il mio output del prompt dei comandi:MariaDB [(none)]> MariaDB [(none)]> set PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec)
therobyouknow,

3
Per il passaggio 3 riavvia MariaDB: ho trovato i seguenti lavori:sudo systemctl restart mariadb
therobyouknow,

7
Alcuni potrebbero trovare il file in /etc/mysql/my.cnf
DSinghvi il

590

Tutte le soluzioni che ho trovato erano molto più complesse del necessario e nessuna ha funzionato per me. Ecco la soluzione che ha risolto il mio problema. Non è necessario riavviare mysqld o avviarlo con privilegi speciali.

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

Con una singola query stiamo cambiando auth_plugin in mysql_native_password e impostando la password di root su root (sentitevi liberi di cambiarla nella query)

Ora dovresti essere in grado di accedere con root. Ulteriori informazioni sono disponibili nella documentazione di mysql

(esci dalla console mysql con Ctrl + D o digitando exit )


41
Non riesco a farlo ... "Hai un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MariaDB per la sintassi corretta da usare vicino ...".
TCB13,

2
Questa risposta ha funzionato, ho aggiunto per caso non è utile votare la risposta, mi scusi!
Taher,

25
Ha funzionato molto bene su Ubuntu 18.04
Almino Melo il

2
@ TCB13 e chiunque altro affronti questo problema. "Non sono in grado di farlo ..." Si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MariaDB per la sintassi corretta da usare vicino a ... ". Usa FLUSH PRIVILEGES prima di eseguire il comando alter
coder

3
mi salvi il giorno :)
xger86x,

50

Ho provato molti passaggi per correggere questo problema. Ci sono così tante fonti per possibili soluzioni a questo problema che è difficile filtrare il senso dall'assurdità. Finalmente ho trovato una buona soluzione qui :

Passaggio 1: identificare la versione del database

$ mysql --version

Vedrai alcuni output come questo con MySQL:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

O output come questo per MariaDB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Prendi nota del database e della versione in uso, poiché li utilizzerai in seguito. Successivamente, è necessario arrestare il database in modo da poter accedervi manualmente.

Passaggio 2: arresto del server database

Per modificare la password di root, è necessario arrestare preventivamente il server di database.

Puoi farlo per MySQL con:

$ sudo systemctl stop mysql

E per MariaDB con:

$ sudo systemctl stop mariadb

Passaggio 3: riavviare il server database senza controllo delle autorizzazioni

Se si esegue MySQL e MariaDB senza caricare informazioni sui privilegi dell'utente, sarà possibile accedere alla riga di comando del database con i privilegi di root senza fornire una password. Ciò ti consentirà di accedere al database senza saperlo.

Per fare ciò, è necessario interrompere il caricamento delle tabelle di concessione nel database, che memorizzano le informazioni sui privilegi dell'utente. Poiché questo rappresenta un po 'un rischio per la sicurezza, dovresti anche saltare la rete e impedire ad altri client di connettersi.

Avviare il database senza caricare le tabelle delle sovvenzioni o abilitare la rete:

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

La e commerciale alla fine di questo comando farà eseguire questo processo in background in modo da poter continuare a utilizzare il terminale.

Ora puoi connetterti al database come utente root, che non dovrebbe chiedere una password.

$ mysql -u root

Vedrai immediatamente invece un prompt della shell del database.

MySQL Prompt

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

mysql>

Richiesta MariaDB

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

MariaDB [(none)]>

Ora che hai accesso root, puoi cambiare la password di root.

Passaggio 4: modifica della password di root

mysql> FLUSH PRIVILEGES;

Ora possiamo effettivamente cambiare la password di root.

Per MySQL 5.7.6 e versioni successive , nonché per MariaDB 10.1.20 e versioni successive , utilizzare il comando seguente:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Per MySQL 5.7.5 e più anziani , così come MariaDB 10.1.20 e più anziani , l'uso:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Assicurati di sostituire new_passwordcon la tua nuova password preferita.

Nota: se il ALTER USERcomando non funziona, di solito è indicativo di un problema più grande. Tuttavia, puoi provare UPDATE ... SETa reimpostare la password di root.

[IMPORTANTE] Questa è la riga specifica che ha risolto il mio problema specifico:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

Ricorda di ricaricare le tabelle delle sovvenzioni dopo questo.

In entrambi i casi, dovresti vedere la conferma che il comando è stato eseguito con successo.

Query OK, 0 rows affected (0.00 sec)

La password è stata modificata, quindi ora è possibile interrompere l'istanza manuale del server di database e riavviarla come prima.

Passaggio 5: riavviare il server database normalmente

L'esercitazione prevede ulteriori passaggi per riavviare il database, ma l'unico pezzo che ho usato è stato questo:

Per MySQL, utilizzare: $ sudo systemctl start mysql

Per MariaDB, utilizzare:

$ sudo systemctl start mariadb

Ora puoi confermare che la nuova password è stata applicata correttamente eseguendo:

$ mysql -u root -p

Il comando dovrebbe ora richiedere la nuova password assegnata. Inseriscilo e dovresti ottenere l'accesso al prompt del database come previsto.

Conclusione

Ora hai accesso amministrativo al server MySQL o MariaDB ripristinato. Assicurati che la nuova password di root scelta sia forte e sicura e conservala in un luogo sicuro.


1
La dichiarazione ALTER USER è stata introdotta in MariaDB 10.2.0.
Benoit Desrosiers,

2
Wow ! questa linea mi mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';ha salvato la vita!
lucyjosef,

36

Nessuna delle risposte sopra mi ha aiutato con questo problema, quindi ecco la soluzione che ho trovato .

La parte rilevante:

Nei sistemi Ubuntu che eseguono MySQL 5.7 (e versioni successive), l'utente root MySQL è impostato per l'autenticazione utilizzando il plug-in auth_socket per impostazione predefinita anziché con una password. Ciò consente una maggiore sicurezza e usabilità in molti casi, ma può anche complicare le cose quando è necessario consentire a un programma esterno (ad esempio phpMyAdmin) di accedere all'utente.

Per usare una password per connettersi a MySQL come root, dovrai cambiare il suo metodo di autenticazione da auth_socket a mysql_native_password. Per fare ciò, apri il prompt di MySQL dal tuo terminale:

sudo mysql

Successivamente, controlla quale metodo di autenticazione utilizza ogni tuo account utente MySQL con il seguente comando:

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

Produzione

+------------------+-------------------------------------------+-----------------------+-----------+
| 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 | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In questo esempio, puoi vedere che l'utente root si autentica effettivamente usando il plugin auth_socket. Per configurare l'account root per l'autenticazione con una password, eseguire il seguente comando ALTER USER. Assicurati di cambiare la password con una password sicura di tua scelta e nota che questo comando cambierà la password di root che hai impostato nel Passaggio 2:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Quindi, esegui FLUSH PRIVILEGES che indica al server di ricaricare le tabelle delle sovvenzioni e di rendere effettive le nuove modifiche:

FLUSH PRIVILEGES;

Controlla di nuovo i metodi di autenticazione utilizzati da ciascuno dei tuoi utenti per confermare che root non esegue più l'autenticazione utilizzando il plug-in auth_socket:

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

Produzione

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

In questo esempio di output puoi vedere che l'utente root di MySQL ora esegue l'autenticazione usando una password. Dopo aver confermato ciò sul proprio server, è possibile uscire dalla shell MySQL:

exit


27

Per utenti Ubuntu / Debian

( può funzionare su altre distro in particolare quelle basate su debian)

Eseguire quanto segue per connettersi come root(senza password)

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

Se non si desidera aggiungere --defaults-fileogni volta che si desidera connettersi come root, è possibile copiare /etc/mysql/debian.cnfnella directory home:

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

e poi:

sudo mysql

2
Questo è stato tutto ciò che è stato necessario. 'root' non è 'root' su Ubuntu di default, apparentemente.
Chaim Eliyah,

21

Dopo aver provato tutte le altre risposte, questo è quello che alla fine ha funzionato per me

sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

Ho trovato la risposta in questo post: https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06


1
QUESTA LINEA DI PLUGIN È DAVVERO DI AIUTO. Ho provato molte compinazioni, ma questa è l'unica funzionata per la versione 14.14 Distrib 5.7.27, per Linux (x86_64)
AlexNikonov,

2
Questo mi ha aiutato anche con mysql 5.7. Quindi applicabile non solo per mariadb
podarok il

L'ho appena usato su MySQL 8 Ubuntu 20.04 e ha funzionato. Altre risposte usando skip-grant-table(my.conf o in mysqlcommand) non hanno funzionato. Potrei accedere utilizzando un account di servizio ( askubuntu.com/a/120769/169836 ) ma UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';non ha funzionato. Solo quando si utilizzava la parte del plugin le cose funzionavano. Grazie ~
hamx0r

16

Per i nuovi utenti di Linux questo potrebbe essere un compito scoraggiante. Consentitemi di aggiornarlo con mysql 8 (l'ultima versione disponibile al momento è la 8.0.12 del 12 settembre 2018)

  1. Aprire il file di configurazione "mysqld.cnf" in "/etc/mysql/mysql.conf.d/".
  2. Aggiungi skip-grant-tables alla riga successiva di [mysql] testo e salva.
  3. Riavviare il servizio mysql come "sudo service mysql restart". Ora il tuo mysql è privo di qualsiasi autenticazione.
  4. Connettiti al client mysql (noto anche come mysql-shell) come mysql -u root -p . Non è necessario inserire una password per ora.
  5. eseguire i comandi di svuotamento comando sql ;
  6. Reimposta ora la password come ALTER USER 'root' @ 'localhost' IDENTIFICATO DA 'MyNewPassword';
  7. Ora torniamo allo stato normale; rimuovere quella riga "skip-grant-tables" da "mysqld.cnf" e riavviare il servizio.

Questo è tutto.


5

Nel tuo banco di lavoro MySQL, puoi andare nella barra laterale sinistra, in Gestione selezionare "Utenti e privilegi", fare clic su radice in Account utente, nella sezione destra fare clic sulla scheda "Limiti account" per aumentare il numero massimo di query, aggiornamenti, ecc. E quindi fare clic sulla scheda "Ruoli amministrativi" e selezionare le caselle per consentire l'accesso all'account. Spero che aiuti!


4

Ho fatto questo per impostare la mia password di root nella configurazione iniziale di MySQL in OSx. Apri un terminale.

sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

Chiudere il terminale e aprire un nuovo terminale. E i seguenti sono gestiti in Linux, per impostare la password di root.

sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables

(sudo mysqld_safe --skip-grant-tables: Questo non ha funzionato per me per la prima volta. Ma secondo tentativo, il successo è stato fuori.)

Quindi accedi a MySQL

mysql -u root

FLUSH PRIVILEGES;

Ora cambia la password:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

Riavvia MySQL:

sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start

3

Nel mio caso in Debian 10, l'errore

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

è stato risolto da (GOOD WAY)

sudo mysql -u root -p mysql

CATTIVA STRADA:

mysql -u root -p mysql

3

Ugh- niente ha funzionato per me! Ho una macchina CentOS 7.4 che esegue mariadb 5.5.64.

Quello che dovevo fare era questo, subito dopo l'installazione di mariadb da yum;

# systemctl restart mariadb
# mysql_secure_installation

Il mysql_secure_installation vi porterà attraverso una serie di misure, tra cui "Imposta password di root? [Y / n]". Basta dire "y" e dargli una password. Rispondi alle altre domande come desideri.

Quindi puoi entrare con la tua password, usando

# mysql -u root -p

Sopravviverà

# systemctl restart mariadb

Il tasto

Quindi, ho controllato il /bin/mysql_secure_installationcodice sorgente per scoprire come era magicamente in grado di cambiare la password di root e nessuna delle altre risposte qui poteva. Il bit di importazione è:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

... dice SET Password=...e non SET authentication_string = PASSWORD.... Quindi, la procedura corretta per questa versione (5.5.64) è:

login using mysql -u root -p , using the password you already set.
Or, stop the database and start it with:
mysql_safe --skip-grant-tables --skip-networking &

Dal prompt mysql>:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

uccidi il mysqld_safe in esecuzione. riavvia mariadb. Il login come root: mysql -u -p. Usa la tua nuova password.

Se lo desideri, puoi impostare tutte le password di root contemporaneamente. Penso che questo sia saggio:

mysql -u root -p
(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

Ciò eseguirà gli aggiornamenti su tutte le password di root: ovvero, per "localhost", "127.0.0.1" e ":: 1"

In futuro, quando vado su RHEL8 o su quello che hai, cercherò di ricordare di controllare l'installazione / bin / mysql_secure_ e di vedere come hanno fatto i ragazzi, quelli che hanno configurato mariadb per questo sistema operativo.


2

Se sei come me e tutti i suggerimenti sopra riportati falliscono, procedi con la disinstallazione di tutte le versioni di mysql sul tuo computer, cerca tutti i file mysql rimanenti usando questo comando sudo find / -name "mysql"e rm -rfogni file o directory con il nome mysql allegato (dovresti saltare i file relativi alle librerie di linguaggi di programmazione). Ora installa una nuova versione di MySQL e divertiti. NB: Perderai tutti i tuoi dati, quindi valuta prima le tue opzioni.


1

Può succedere se non hai abbastanza privilegi. Digita su, inserisci la password di root e riprova.


1

Ok, so che questa è una vecchia discussione, ma se hai raggiunto questa pagina tramite Google come ho fatto io e nessuna delle soluzioni di cui sopra ha funzionato, quello che si è rivelato essere l'errore è stata la follia al 100% da parte mia. Non mi sono connesso al server. Una volta collegato tutto è andato liscio.

Nel caso in cui mi aiuti a conoscere la mia configurazione, sto usando Sequel Pro e sto provando a connettermi con Node usando il pacchetto NPM, mysql. Non pensavo di dover effettivamente collegarmi (oltre a eseguire Sequel Pro) perché lo stavo già facendo dalla mia app.

inserisci qui la descrizione dell'immagine


0

Soluzione: arrendersi!

Ascoltami, ho trascorso circa due interi giorni a cercare di far funzionare MySQL inutilmente, sempre bloccato con errori di autorizzazione, nessuno dei quali è stato risolto dalle risposte in questo thread. È arrivato al punto che ho pensato che se avessi continuato sarei impazzito.

Per pazienza di farlo funzionare, ho inviato il comando per installare SQLite, usando solo 450 KB, e ha funzionato perfettamente fin dall'inizio.

Se non hai la pazienza di un santo, vai con SQLite e risparmia molto tempo, fatica, dolore e spazio di archiviazione ..!

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.