Accesso negato per l'utente "root" @ "localhost" (utilizzando la password: SÌ) - Nessun privilegio?


111

Ricevo continuamente questo errore.

Sto usando mySQL Workbench e da quello che ho scoperto è che i privilegi dello schema di root sono nulli. Non ci sono affatto privilegi.

Ho problemi con le piattaforme per cui viene utilizzato il mio server e questo è stato un problema improvviso.

root@127.0.0.1 apparentemente ha molti accessi ma ho effettuato l'accesso come quello, ma assegna comunque a localhost - localhost non ha privilegi.

Ho fatto un paio di cose come FLUSH HOSTS, FLUSH PRIVILEGES, ecc, ma ho trovato nessun successo da quella o da Internet.

Come posso recuperare l'accesso di root? Trovo questo frustrante perché quando mi guardo intorno le persone si aspettano che tu "abbia accesso" ma io non ho accesso quindi non posso entrare nella riga di comando o altro e GRANTme stesso nulla.

Quando si esegue SHOW GRANTS FOR rootquesto è ciò che ottengo in cambio:

Codice di errore: 1141. Nessuna concessione di questo tipo definita per l'utente "root" sull'host "%"


Esegui SHOW GRANTS FOR rootuna query, pubblica il risultato nella tua domanda.
NobleUplift

Stai tentando di accedere al database dal localhost o da un altro host utilizzando MySQL Workbench?
Andy Jones

riavvia il server con --skip-grant-table e accedi con qualsiasi utente e fornisci i privilegi completi per eseguire il root e riavvia nuovamente il server senza l'opzione precedente
vidyadhar

@ AndyJones no, è su un server dedicato che sto usando.
Chase

@vidyadhar mi dispiace, non sono sicuro di dove lo farei?
Chase

Risposte:


52

Usa le istruzioni per reimpostare la password di root , ma invece di reimpostare la password di root, inseriremo forzatamente un record nella tabella mysql.user

Nel file init, usa invece questo

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
Mi dispiace Andy, ma quando arrivo al passaggio 6 continuo a riscontrare un problema. Dato che ho usato una procedura guidata di installazione, avrei usato "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 Tutto è dove dovrebbe essere e quello che hai sopra l'ho messo nel file di conseguenza. Ho anche interrotto il servizio. Ottengo solo questo output: prntscr.com/1ilxau e tutto (plugin) spento. Davvero confuso.
Chase

2
lo stai eseguendo come amministratore?
Andy Jones

1
Con mia stupidità, non lo ero. Dopo che ero, ho ottenuto questo prntscr.com/1imcnj - La prima volta che l'ho fatto su proprie righe (da paste), poi ho messo tutto su una riga. Mi dispiace che questo sia così confuso per me, non per l'esperto sql di per sé.
Inseguimento

16
dà: ERROR 1054 (42S22): Unknown column 'Password' in 'field list'errore. @AndyJones
Alper

1
Ricevo: colonna sconosciuta "Password" in "elenco campi"
sricheta ruj

130

Se hai lo stesso problema in MySql 5.7. +:

Access denied for user 'root'@'localhost'

è perché MySql 5.7 per impostazione predefinita consente di connettersi con socket, il che significa che ti connetti semplicemente con sudo mysql. Se esegui sql:

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

poi lo vedrai:

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

Per consentire la connessione con root e password, aggiorna i valori nella tabella con il comando:

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

Quindi esegui di nuovo il comando di selezione e vedrai che è cambiato:

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

E questo è tutto. È possibile eseguire questo processo dopo aver eseguito e completato il sudo mysql_secure_installationcomando.

Per mariadb, usa

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

per impostare la password. Maggiori informazioni su https://mariadb.com/kb/en/set-password/


1
Really Thanks while connection Establishment in linux mint
Lova Chittumuri

L'aggiornamento da auth_socketa ha mysql_native_passwordrisolto il mio problema. Grazie!
olore

1
Questo è stato assolutamente esasperante cercare di capire e una gigantesca perdita di tempo. Vorrei che lo chiedessero durante mysql_secure_installation. Grazie mille per questa risposta.
PatPeter


42

Non mi piaceva il mio privilegio utente, quindi lo SUDO. (in bash << sudo set user and password) (questo fornisce il nome utente di root e non imposta la password su nulla) (su Mac)

sudo mysql -uroot -p

27

Prova i seguenti comandi

~$ 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> 

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

per la versione più recente di mysql hanno cambiato il nome della colonna della password come authentication_string
Ramesh Maharjan

sudo mysqld_safemi ha preso questo /var/run/mysqld for UNIX socket file don't exists, poi dopo mkdir -p /var/run/mysqlde sudo chown -R mysql:mysql /var/run/mysqld/ha funzionato e ha avviato il daemon.
kenzotenma

1
ERRORE 2002 (HY000): Impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.so
Mostafa

19

per le persone che si trovano ad affrontare l'errore di seguito nella versione mysql 5.7+ -

Access denied for user 'root'@'localhost' (using password: YES)
  1. Apri un nuovo terminale

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc è stato arrestato

  3. sudo mysqld_safe --skip-grant-tables & questo ignorerà tutti i privilegi di livello di concessione e avvierà il mysql in modalità provvisoria A volte il processo si blocca solo a causa di

grep: errore di scrittura: pipe interrotta 180102 11:32:28 mysqld_safe Accesso a "/var/log/mysql/error.log".

Premi semplicemente Ctrl + Z o Ctrl + C per interrompere e uscire dal processo

  1. mysql -u root

Benvenuto nel monitor MySQL. I comandi terminano con; o \ g. L'ID della tua connessione MySQL è 2 Versione server: 5.7.8-rc MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle e / o sue affiliate. Tutti i diritti riservati.

Oracle è un marchio registrato di Oracle Corporation e / o delle sue affiliate. Gli altri nomi possono essere marchi dei rispettivi proprietari.

Digita "help;" o "\ h" per chiedere aiuto. Digita "\ c" per cancellare l'attuale istruzione di input.

  1. mysql> use mysql;

Lettura delle informazioni della tabella per il completamento dei nomi delle tabelle e delle colonne È possibile disattivare questa funzione per ottenere un avvio più rapido con -A

Database cambiato

  1. mysql> update user set authentication_string=password('password') where user='root'; Query OK, 4 righe interessate, 1 avviso (0,03 sec) Righe corrispondenti: 4 Modificate: 4 Avvisi: 1

  2. mysql> flush privileges; Query OK, 0 righe interessate (0.00 sec)

  3. mysql> quit Ciao

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

..180102 11:37:12 mysqld_safe mysqld dal file pid /var/run/mysqld/mysqld.pid è terminato. * MySQL Community Server 5.7.8-rc viene arrestato arif @ ubuntu: ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc è avviato

  1. mysql -u root -p

    Inserire la password:

    Benvenuto nel monitor MySQL. I comandi terminano con; o \ g. L'ID della tua connessione MySQL è 2 Versione server: 5.7.8-rc MySQL Community Server (GPL)

dopo la versione di mysql 5.7+, la password della colonna è stata sostituita dal nome authentication_string dalla tabella mysql.user.

spero che questi passaggi aiuteranno chiunque, grazie.


15

Stavo usando Ubuntu 18 e ho semplicemente installato MySQL (password: root) con i seguenti comandi.

sudo apt install mysql-server
sudo mysql_secure_installation

Quando ho provato ad accedere con il normale utente di Ubuntu, mi stava lanciando questo problema.

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

Ma sono stato in grado di accedere a MySQL tramite il super utente. Utilizzando i seguenti comandi sono stato in grado di accedere tramite un utente normale.

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

Quindi dovresti essere in grado di accedere a Mysql con l'account normale.

inserisci qui la descrizione dell'immagine



5

Se ricevi questo errore in Workbench ma riesci ad accedere dal terminale, segui questi passaggi.

Per prima cosa accedi semplicemente con la tua password attuale:

sudo mysql -u root -p

Quindi cambia la tua password perché avere una password di bassa sicurezza a volte dà errori.

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

FLUSH PRIVILEGES;

Quindi esci e accedi di nuovo con la tua nuova password:

quit

sudo mysql -u root -p

Dopo aver effettuato correttamente l'accesso, digita il comando:

use mysql;

Dovrebbe mostrare un messaggio come "Database modificato", quindi digitare:

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

Dopo quel tipo:

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

Quindi digita:

FLUSH PRIVILEGES;

Quindi esci semplicemente:

quit

Ora prova ad accedere con la tua nuova password nel tuo BANCO DI LAVORO. Spero che funzioni. Grazie.


4

Ho affrontato questo problema durante l'installazione di Testlink sul server Ubuntu, ho seguito questi passaggi

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

Ora fermare l'istanza e ricominciare ad es

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

2

Bene, il modo più semplice per reimpostare la password di root è:

  • riavvia l'opzione mysqld --skip-grant-tables . Ciò consente a chiunque di connettersi senza password e con tutti i privilegi. Poiché questo non è sicuro, potresti voler utilizzare --skip-grant-tables insieme a --skip-networking per impedire la connessione dei client remoti.

  • Connettiti al server mysqld con questo comando:

  • shell> mysql Emette le seguenti istruzioni nel client mysql. Sostituisci la password con la password che desideri utilizzare.

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

  • Arresta il server, quindi riavvialo normalmente (senza le opzioni --skip-grant-tables e --skip-networking).

Fonte della documentazione Mysql e dell'esperienza personale:

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



1

Ho risolto lo stesso problema eseguendo Workbench come amministratore.

... Immagino sia a causa delle restrizioni sui computer aziendali, nel mio caso ...


0

Prova i seguenti passaggi per superare questo problema:

  1. Apri il terminale / prompt dei comandi e vai alla cartella bin della cartella di installazione di MySQL. Quindi esegui il comando mysqld --console.
  2. Se puoi vedere che la linea 171010 14:58:22 [Note] --secure-file-privè impostata su NULL. Le operazioni relative all'importazione e all'esportazione dei dati vengono disabilitate, dopo aver eseguito il comando precedente dal prompt dei comandi.
  3. Quindi è necessario verificare che mysqldsia bloccato da Windows Firewall o da un altro programma.
  4. Se è bloccato da Windows Firewall, è necessario sbloccarlo e salvare le impostazioni.
  5. Per sbloccare l' applicazione mysqldo mysql, segui i passaggi seguenti:
    1. Vai al prompt dei comandi e digita wf.mscper aprire le impostazioni del firewall.
    2. Fare clic su Consenti un'app o una funzionalità tramite Windows Firewall.
    3. Seleziona le istanze mysqldo mysqldsono disponibili nell'elenco e seleziona la casella di controllo per il dominio, pubblico e privato e salva le impostazioni.
  6. Torna alla cartella bin e prova di nuovo il comando dal passaggio 1.
  7. Dovrebbe funzionare bene e non mostrare errori.

Dovrebbe essere possibile eseguire la console MySQL senza problemi ora!


0

Ho risolto lo stesso problema utilizzando sql successivo e riavviando il server 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';

0

Ho lavorato su Accesso negato per l'utente 'root' @ 'localhost' (utilizzando la password: SI) per diverse ore, ho trovato la seguente soluzione,

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

0

Non penso che tu debba sfuggire al --init-fileparametro:

"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

Dovrebbe essere:

"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


0

per il problema di cui sopra la tua password nel sistema dovrebbe corrispondere alla password che hai passato nel programma perché quando esegui il programma controlla la password di sistema come hai dato root come utente quindi ti dà un errore e allo stesso tempo il record non viene cancellato dal database.

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

Mantieni la tua password di sistema come jacob234 e quindi esegui il codice.


0

Con me è stato lo stesso problema, ma è stato causato, perché stavo usando il server mysql su 32 (bit) e il workbench era in esecuzione sulla versione a 64 (bit). il server e il workbench devono avere la stessa versione.

xpress



0

Stavo affrontando lo stesso problema quando cercavo di connettere il database Mysql utilizzando l'applicazione Laravel. Vorrei raccomandare di controllare la password dell'utente. La password MySQL non deve contenere caratteri speciali come # , & , ecc ...


Su bluehost, la rimozione di caratteri speciali dalla password ha effettivamente risolto il problema.
Mena
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.