Accesso negato per l'utente "root" @ "localhost" (utilizzando la password: SÌ) dopo la nuova installazione su Ubuntu


124

Oggi ho effettuato un accesso come root in Ubuntu 14.04.1 LTS ll

e poi apt-get install mariadb-server(senza sudo ma come root).

Con mySQL -h localhost -u root --password=<PW>ho

Accesso negato per l'utente 'root' @ 'localhost' (utilizzando la password: YES)

Con mySQL -u root -pho effettuato l'accesso al DB e l'ho fatto

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Ma questo non ha aiutato. Hai qualche idea? Non ho trovato la risposta per le domande simili.


Hai provato a reimpostare la password per root?
Ozgur Bar

Risposte:


278

TL; DR: per accedere alle versioni più recenti di mysql / mariadb dopo come utente root, dopo una nuova installazione, è necessario essere in una shell di root (cioè sudo mysql -u rooto mysql -u rootall'interno di una shell avviata da su -o sudo -iprima)


Avendo appena fatto lo stesso aggiornamento, su Ubuntu, ho avuto lo stesso problema.

Quello che era strano era quello

sudo /usr/bin/mysql_secure_installation

Accetterebbe la mia password e mi consentirà di impostarla, ma non sono riuscito ad accedere come roottramitemysql client

Ho dovuto iniziare con mariadb

sudo mysqld_safe --skip-grant-tables

per ottenere l'accesso come root, mentre tutti gli altri utenti potrebbero ancora accedere correttamente.

Guardando la mysql.usertabella ho notato che per root la plugincolonna è impostata su unix_socketmentre tutti gli altri utenti è impostata su "mysql_native_password". Una rapida occhiata a questa pagina: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ spiega che Unix Socket abilita il login facendo corrispondere uidil processo che esegue il client con quello dell'utente nel mysql.usertavolo. In altre parole per accedere a mariadb rootdevi essere loggato come root.

Abbastanza sicuro riavviando il mio demone mariadb con l'autenticazione richiesta posso accedere come root con

sudo mysql -u root -p

o

sudo su -
mysql -u root -p

Fatto ciò ho pensato a come accedere senza dover fare il sudo, che è solo questione di eseguire queste query mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(sostituzione <password> con la password di root mysql desiderata). Questo ha abilitato gli accessi con password per l'utente root.

In alternativa, eseguire la query mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Cambierà l'account di root per utilizzare la password di accesso senza modificare la password, ma questo potrebbe lasciarti con un'installazione mysql / mariadb senza password di root su di essa.

Dopo uno di questi è necessario riavviare mysql / mariadb:

sudo service mysql restart

E voilà ho avuto accesso dal mio account personale tramite mysql -u root -p

NOTA BENE CHE FARE QUESTO STA RIDUCENDO LA SICUREZZA Presumibilmente gli sviluppatori di MariaDB hanno scelto di far funzionare l'accesso root in questo modo per una buona ragione.

A pensarci bene sono abbastanza felice di doverlo fare, sudo mysql -u root -pquindi sto tornando a quello, ma ho pensato di pubblicare la mia soluzione perché non riuscivo a trovarne una altrove.


7
"per accedere a mariadb come root devi essere loggato come root." - Questa frase dovrebbe essere all'inizio della risposta.
Philipp Ludwig

1
perché esegui il GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; comando due volte prima di svuotare i privati?
Blairg23

4
Questo dovrebbe essere da qualche parte più visibile, come grandi lettere rosse durante l'installazione o qualcosa del genere ... Ho solo sprecato poche ore di vita cercando di configurare il server di cui ho bisogno al più presto ...
Gall Annonim

1
a proposito, se sei pigro come me, puoi risparmiare come due secondi consudo service mysql restart
zeisi

1
Grazie per il suggerimento, ottimo per lo sviluppo, ma come si ripristina l'originale?
Sam l'

42

In Ubuntu 16.04 LTS pulito, accesso root di MariaDB per localhost cambiato dallo stile della password allo stile di accesso sudo ...

quindi, fallo e basta

sudo mysql -u root

poiché vogliamo accedere con password, creare un altro utente "utente"

nella console MariaDB ... (accedi alla console MariaDB con 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

quindi nel prompt della shell bash,

mysql-workbench

e puoi accedere con "utente" con "tua password" su localhost


12

Prova il comando

sudo mysql_secure_installation

premere invio e assegnare una nuova password per root in mysql / mariadb .

Se ricevi un errore come

ERRORE 2002 (HY000): impossibile connettersi al server MySQL locale tramite il socket "/var/run/mysqld/mysqld.sock"

abilitare il servizio con

service mysql start

ora se rientri con

mysql -u root -p

se segui il problema, inserisci sudo sue mysql -u root -pora applica i permessi a root

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

questo ha risolto il mio problema in MariaDB .

In bocca al lupo



3

Dovevo essere loggato in Ubuntu come root per accedere a Mariadb come root. Potrebbe avere qualcosa a che fare con quel "Harden ..." che ti viene chiesto di fare la prima volta che installi. Così:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

e sei dentro.


2

Il nuovo comando per svuotare i privilegi è:

FLUSH PRIVILEGES

Il vecchio comando FLUSH ALL PRIVILEGES non funziona più.

Riceverai un errore simile a questo:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): 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 'ALL PRIVILEGES' at line 1

Spero che questo ti aiuti :)



0

Un sistema come Ubuntu preferisce utilizzare il plugin auth_socket . Proverà ad autenticarsi confrontando il tuo nome utente nel DB e il processo che fa richiesta mysql; è descritto qui

Il plug-in socket verifica se il nome utente del socket (il nome utente del sistema operativo) corrisponde al nome utente MySQL specificato dal programma client al server e consente la connessione solo se i nomi corrispondono.

Invece potresti voler tornare indietro con mysql_native_password , che richiederà l'autenticazione utente / password.

Circa il metodo per ottenere questo, vi consiglio questo posto.

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.