In breve, su MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
dove sostituisci NEWPASSWORD con la password che desideri e tutto il resto alla lettera.
Il problema qui è che quando MariaDB o MySQL sono installati / aggiornati (specialmente se ad un certo punto la radice è impostata senza una password) nella tabella Users la password è effettivamente vuota (o ignorata) e l'accesso dipende dall'utente di sistema corrispondente a un utente MySQL. È possibile verificare ciò come segue passando alla radice del sistema e quindi digitare:
mysql -uroot -p
Quindi immettere nessuna password o password errata . Probabilmente verrai fatto entrare (potresti anche essere in grado di accedere dalla radice unix semplicemente # mysql
perché la password è irrilevante e l'utente è definito).
Quindi cosa sta succedendo? Bene, se accedi come root e fai quanto segue:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
noterai auth_socket
(che potrebbe leggere unix_socket
su MariaDB). Questi socket ignorano le password e consentono all'utente Unix corrispondente di accedere senza un controllo della password. Questo è il motivo per cui è possibile accedere con root ma non con un altro utente.
Quindi la soluzione è aggiornare gli utenti per non utilizzare auth_socket/unix_socket
e impostare correttamente una password.
Su MariaDB (<10.2, vedere i commenti sotto) che si trova sulla versione 16 di Ubuntu dal 2017 questo dovrebbe essere sufficiente. NEWPASSWORD è la tua password. mysql_native_password
scrivi alla lettera.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(È possibile che l'impostazione del plug-in su vuoto funzioni. YMMV. Non ho provato questo. Quindi questa è un'alternativa.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Altrimenti:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Poi
FLUSH PRIVILEGES;
Per la cronaca, la soluzione che consiste nell'eliminare l'utente e ricrearlo con '%' mi ha completamente bloccato fuori dal database e può causare altri problemi a meno che non si ottenga la grant
dichiarazione esattamente corretta - più semplice aggiornare semplicemente il root che già si possiede.
Nella mia esperienza, il problema si verifica solo con l'utente root, poiché altri utenti verranno aggiunti manualmente non parte di un'installazione / aggiornamento iniziale.