web-dev-qa-db-fra.com

mysql (mariadb) ERREUR 1698 (28000): accès refusé pour l'utilisateur 'root' @ 'localhost'

Je travaille sur Xubuntu 15.04. J'ai déjà installé MariaDB-Server sur différents systèmes et on m'a toujours demandé un mot de passe root lors de l'installation. Cette fois, cependant, je ne me souviens pas d'avoir demandé le mot de passe. Lorsque j'essaie de me connecter sans mot de passe (ou mot de passe vide), l'erreur Access denied for user 'root'@'localhost' s'affiche. J'ai essayé de désinstaller complètement le paquet en

Sudo apt-get remove mariadb-server
Sudo apt-get purge mariadb-server

Quand j'ai réinstallé, on ne m'a toujours pas demandé le mot de passe root.

J'ai essayé l'approche mysqld --skip-grant-tables de mysql comment résoudre un problème d'accès refusé pour l'utilisateur 'root' @ 'localhost' . Je peux modifier le mot de passe de l'utilisateur root dans la base de données mysql - au moins la valeur de hachage change - mais je ne peux toujours pas me connecter avec le nouveau mot de passe après un redémarrage du serveur mysql. Je reçois toujours la même erreur.

L'utilisateur debian-sys-maint n'existe pas. Donc, je ne peux pas l'utiliser pour réparer quoi que ce soit.

Des idées quoi d'autre je pourrais essayer?

20
d72b617c

J'ai résolu le problème suite à la réponse de ce post:

Impossible de réinitialiser le mot de passe root de MySQL (MariaDB)

Il faut changer le champ de plugin de mysql.user pour toutes les racines en une chaîne vide.

2
d72b617c

Vous devez réinitialiser le mot de passe. donc pour ça

Sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
31
Abhinav bhardwaj

L'idée avec la nouvelle configuration est que vous ne devriez pas utiliser de mot de passe du tout. Voir UNIX_SOCKET Authentication Plugin pour plus de détails.

Le contenu de /usr/share/doc/mariadb-server-10.0/README.Debian.gz sur Ubuntu 16.04 est particulièrement pertinent:

Lors de nouvelles installations, aucun mot de passe root n’est défini et aucun utilisateur debian-sys-maint n’est plus créé. À la place, le compte racine MariaDB est configuré pour être authentifié à l'aide du socket unix, par exemple. toute invocation de mysqld par root ou via Sudo permettra à l'utilisateur de voir l'invite mysqld.

Vous ne pouvez jamais jamais supprimer l'utilisateur mysql "root". Bien qu'aucun mot de passe ne soit défini, le plug-in unix_auth garantit qu'il ne peut être exécuté que localement en tant qu'utilisateur root.

Les informations d'identification dans /etc/mysql/debian.cnf spécifient l'utilisateur utilisé par les scripts d'initialisation pour arrêter le serveur et effectuer une journalisation. C’était l’utilisateur debian-sys-maint qui n’est plus utilisé en tant que root peut s’exécuter directement.

Donc, si vous désactivez ce plug-in pour root et définissez un mot de passe, le travail journalier cron sera interrompu car il supposera qu'il se connectera en tant qu'utilisateur root sans mot de passe, mais avec le plug-in.

Plus tard, il est écrit:

Les scripts doivent être exécutés en tant qu'utilisateur disposant des droits requis et identifiés via unix_socket.

Il semble donc que les applications ne doivent plus utiliser de mots de passe.

10
colan

Je l'ai fait en exécutant cette commande, juste après l'installation:

$ Sudo mysql_secure_installation

À la première étape, le mot de passe est vide. Appuyez simplement sur Entrée.

1
dxvargas

J'ai eu le même problème sur un raapberry pi avec stretch. Ma solution était de créer un nouvel utilisateur avec tous les privilèges en procédant comme suit:

Sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Maintenant, je peux me connecter et nous l'utilisateur "admin" en tant que superutilisateur.

J'espère que cela va aider quelqu'un.

0
trasba

Il suffit d'utiliser Sudo mysql -u root - c'est tout


Détails: Les versions les plus récentes s'authentifient auprès de mysql à l'aide de l'authentification système. Donc, si vous savez utiliser le système d’exploitation de Sudo, cela suppose que vous êtes également root de la base de données. Vous pouvez le confirmer en émettant Sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Vous devriez voir quelque chose comme ça (peut-être avec auth_socket dans d'autres distributions)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+
0
DeepSpace101

Utilisez simplement Sudo mysql -u root et vous serez dans.

Détails: Les versions les plus récentes s'authentifient auprès de mysql à l'aide de l'authentification système. Donc, si vous savez utiliser le système d’exploitation de Sudo, cela suppose que vous êtes également root de la base de données. Vous pouvez le confirmer en émettant Sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Vous devriez voir quelque chose comme ça (peut-être avec auth_socket dans d'autres distributions)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+
0
DeepSpace101