SQLSTATE[HY000] [1698] Access denied for user ‘root’@’localhost’.


Navigando in rete ho trovato una serie di soluzioni valide e meno valide, ma tutte macchinose di un problema abbastanza semplice. Se è tanto tempo che non installiamo phpmyadmin potremmo incappare in questo errore nella convinzione che il nostro utente abilitato sia “root” come siamo abituati ad avere.

Ma se osserviamo il terminale mentre apt stà installando phpmyadmin…..

etermining localhost credentials from /etc/mysql/debian.cnf: succeeded.
dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf

Creating config file /etc/dbconfig-common/phpmyadmin.conf with new version

Creating config file /etc/phpmyadmin/config-db.php with new version
checking privileges on database phpmyadmin for phpmyadmin@localhost: user creation needed.
granting access to database phpmyadmin for phpmyadmin@localhost: success.
verifying access for phpmyadmin@localhost: success.
creating database phpmyadmin: success.
verifying database phpmyadmin exists: success.
populating database via sql... done.
dbconfig-common: flushing administrative password
apache2_invoke: Enable configuration phpmyadmin
Elaborazione dei trigger per man-db (2.8.3-2)...
Elaborazione dei trigger per libapache2-mod-php7.2 (7.2.5-0ubuntu0.18.04.1)...
Elaborazione dei trigger per hicolor-icon-theme (0.17-2)...

…ci accorgiamo che l’utente per accedere all’interfaccia di phpmyadmin non è “root” bensì “phpmyadmin” con con la password che avete inserito.

Entriamo ma non abbiamo privilegi …

apriamo il terminale e connettiamoci con mysql:

sudo mysql --user=root mysql

importante non tralasciate il sudo.
diamo tutti i privilegi al nostro utente:

GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;

ricarichiamo in memoria le tabelle dei permessi:

FLUSH PRIVILEGES;

il nostro problema è risolto.
Se non siete contenti dell’utente “phpmyadmin” e volete creare un ulteriore utente:

CREATE USER 'alroutente'@'localhost' IDENTIFIED BY 'alrapassword';

se volete cambiare password:

SET PASSWORD FOR 'utente'@'localhost' = PASSWORD(‘nuovapassword’);

Se il vostro database non è per uso  locale bisogna creare ed attivare i privilegi per l’utente nell’ambito di qualsiasi (%) host:

CREATE USER 'utente'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'utente'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit

per uscire da mysql.

Buon lavoro a tutti.

Lascia un commento