En bref, sur MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
où vous remplacez NEWPASSWORD par le mot de passe que vous voulez et tout le reste.
Le problème ici est que, lorsque MariaDB ou MySQL sont installés / mis à jour (en particulier si, à un moment donné, root est défini sans mot de passe), dans le tableau Utilisateurs, le mot de passe est réellement vide (ou ignoré), et la connexion dépend de l'utilisateur système correspondant. à un utilisateur MySQL. Vous pouvez le tester comme suit en basculant sur la racine du système, puis en tapant:
mysql -uroot -p
Ensuite, entrez soit pas de mot de passe, soit un mot de passe incorrect . Vous serez probablement laissé entrer (vous pourrez même vous connecter à partir de la racine unix simplement # mysql
parce que le mot de passe n'a pas d'importance et que l'utilisateur est défini).
Alors que se passe-t-il? Eh bien, si vous vous connectez en tant que root et procédez comme suit:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
vous noterez auth_socket
(qui peut lire unix_socket
sur MariaDB). Ces sockets ignorent les mots de passe et permettent à l'utilisateur Unix correspondant d'entrer sans vérification de mot de passe. C'est pourquoi vous pouvez vous connecter avec root mais pas avec un autre utilisateur.
La solution consiste donc à mettre à jour les utilisateurs pour qu'ils n'utilisent pas le auth_socket/unix_socket
et définissent correctement un mot de passe.
Sur MariaDB (<10.2, voir les commentaires ci-dessous) qui est sur la version 16 d'Ubuntu à partir de 2017, cela devrait suffire. NEWPASSWORD est votre mot de passe. mysql_native_password
vous tapez textuellement.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Il est possible que régler le plug-in sur vide fonctionne. YMMV. Je n'ai pas essayé cela. C'est donc une alternative.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Autrement:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
ensuite
FLUSH PRIVILEGES;
Pour mémoire, la solution consistant à supprimer l'utilisateur et à le recréer avec '%' m'a totalement bloquée en dehors de la base de données, et peut entraîner d'autres problèmes à moins que vous n'obteniez la grant
déclaration exacte - il est plus facile de mettre à jour la racine que vous avez déjà.
D'après mon expérience, le problème ne concerne que l'utilisateur root, car d'autres utilisateurs seront ajoutés manuellement, mais ne feront pas partie d'une installation / mise à jour initiale.