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.