554 votes

MySQL Error : : 'Access denied for user 'Root'@'localhost'' (Accès refusé pour l'utilisateur 'Root'@'localhost')

Pensez-y :

./mysqladmin -u root -p** '_redacted_'  

Sortie (y compris la saisie du mot de passe) :

Entrez le mot de passe :

mysqladmin : la connexion au serveur à 'localhost' a échoué erreur :
Accès refusé pour l'utilisateur 'Root'@'localhost' (avec mot de passe : YES)'.

Comment puis-je réparer cela ?

1 votes

@clearlight Ce n'est pas la même question, ce post est un problème avec mysqladmin gagner super privilèges dans mysql, l'autre post est un problème avec une simple connexion à partir de socket.

1 votes

Essayer de supprimer s'il existe ~/.my.cnf fichier.

1075voto

user1878906 Points 3147

Toutes les solutions que j'ai trouvées étaient beaucoup plus complexes que nécessaire et aucune n'a fonctionné pour moi. Voici la solution qui a résolu mon problème. Il n'est pas nécessaire de redémarrer mysqld ou le démarrer avec des privilèges spéciaux.

sudo mysql

-- for MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

-- for MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');

Avec une seule requête, nous changeons le auth_plugin a mysql_native_password et en fixant le mot de passe Root à Racine (n'hésitez pas à le changer dans la requête) .

Vous devriez maintenant être en mesure de vous connecter avec Root. Vous trouverez plus d'informations dans Documentation sur MySQL ou Documentation sur MariaDB .

(Quittez la console MySQL avec Ctrl + D ou en tapant quitter .)

70 votes

Je n'arrive pas à faire ça... "Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MariaDB pour connaître la bonne syntaxe à utiliser près...".

5 votes

Cette réponse a fonctionné, j'ai accidentellement ajouté is not useful answer vote, excusez-moi !

4 votes

Version à une ligne : sudo mysql -e "ALTER USER 'Root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root'"

664voto

  1. Ouvrir et modifier /etc/my.cnf ou /etc/mysql/my.cnf en fonction de votre distribution.
  2. Añadir skip-grant-tables sous [mysqld]
  3. Redémarrer MySQL
  4. Vous devriez être en mesure de vous connecter à MySQL maintenant en utilisant la commande suivante mysql -u root -p
  5. Exécuter mysql> flush privileges;
  6. Définissez un nouveau mot de passe en ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Retournez dans /etc/my.cnf et supprimer/commenter skip-grant-tables
  8. Redémarrer MySQL
  9. Vous pourrez maintenant vous connecter avec le nouveau mot de passe. mysql -u root -p

6 votes

Bonjour, j'ai eu le même problème. J'ai fait ce qui précède, et cela a résolu le problème, mais à chaque fois que je redémarre CentOS, je dois refaire toutes les étapes (j'ai le message:Access denied for user 'Root'@'localhost' (using password : NO) - quand je lance la commande mysql (ou n'importe quelle commande sql) et je refais tout comme ci-dessus à chaque redémarrage.

1 votes

J'ai exactement le même problème qu'Eitan.

1 votes

C'est la SEULE solution qui a fonctionné pour moi. Toutes les autres tentatives d'ignorer les tables d'attribution en exécutant mysql --skip , etc. ont échoué.

91voto

Blairg23 Points 78

J'ai essayé de nombreuses étapes pour corriger ce problème. Il existe tellement de sources de solutions possibles à ce problème qu'il est difficile de faire la part des choses. J'ai finalement trouvé une bonne solution aquí :

Étape 1 : Identifier la version de la base de données

mysql --version

Vous verrez une sortie comme celle-ci avec MySQL :

mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Ou une sortie comme celle-ci pour MariaDB :

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Notez la base de données et la version que vous exécutez, car vous les utiliserez plus tard. Ensuite, vous devez arrêter la base de données pour pouvoir y accéder manuellement.

Étape 2 : arrêt du serveur de base de données

Pour modifier le mot de passe Root, vous devez au préalable arrêter le serveur de la base de données.

Vous pouvez le faire pour MySQL avec :

sudo systemctl stop mysql

Et pour MariaDB avec :

sudo systemctl stop mariadb

Étape 3 : Redémarrage du serveur de base de données sans vérification des autorisations

Si vous exécutez MySQL et MariaDB sans charger d'informations sur les privilèges de l'utilisateur, il vous permettra d'accéder à la ligne de commande de la base de données avec les privilèges Root sans fournir de mot de passe. Cela vous permettra d'accéder à la base de données sans le savoir.

Pour ce faire, vous devez empêcher la base de données de charger les tables d'octroi, qui stockent les informations relatives aux privilèges des utilisateurs. Comme il s'agit d'un risque pour la sécurité, vous devez également désactiver la mise en réseau pour empêcher d'autres clients de se connecter.

Démarrez la base de données sans charger les tables d'octroi ni activer la mise en réseau :

sudo mysqld_safe --skip-grant-tables --skip-networking &

L'esperluette à la fin de cette commande fera en sorte que ce processus s'exécute en arrière-plan afin que vous puissiez continuer à utiliser votre terminal.

Vous pouvez maintenant vous connecter à la base de données en tant qu'utilisateur Root, qui ne devrait pas demander de mot de passe.

mysql -u root

Vous verrez immédiatement une invite du shell de la base de données à la place.

Invite MySQL

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Invite MariaDB

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Maintenant que vous avez l'accès Root, vous pouvez changer le mot de passe Root.

Étape 4 : Changement du mot de passe Root

mysql> FLUSH PRIVILEGES;

Maintenant nous pouvons réellement changer le mot de passe Root.

Para MySQL 5.7.6 et plus récent ainsi que MariaDB 10.1.20 et plus récent utilisez la commande suivante :

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Para MySQL 5.7.5 et plus ainsi que MariaDB 10.1.20 et plus utiliser :

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Veillez à remplacer new_password avec le nouveau mot de passe de votre choix.

Note : Si le ALTER USER ne fonctionne pas, c'est généralement le signe d'un problème plus important. Cependant, vous pouvez essayer UPDATE ... SET pour réinitialiser le mot de passe Root à la place.

[IMPORTANT] C'est la ligne spécifique qui a résolu mon problème particulier :

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

N'oubliez pas de recharger les tableaux de subventions après cela.

Dans les deux cas, vous devriez voir la confirmation que la commande a été exécutée avec succès.

Query OK, 0 rows affected (0.00 sec)

Le mot de passe a été modifié, vous pouvez donc maintenant arrêter l'instance manuelle du serveur de base de données et la redémarrer comme avant.

Étape 5 : Redémarrer le serveur de base de données normalement

Le tutoriel présente quelques étapes supplémentaires pour redémarrer la base de données, mais le seul élément que j'ai utilisé est celui-ci :

Pour MySQL, utilisez :

sudo systemctl start mysql

Pour MariaDB, utilisez :

sudo systemctl start mariadb

Maintenant, vous pouvez confirmer que le nouveau mot de passe a été appliqué correctement en exécutant :

mysql -u root -p

La commande devrait maintenant vous demander le nouveau mot de passe attribué. Entrez-le et vous devriez avoir accès à la base de données comme prévu.

Conclusion

Vous avez maintenant un accès administratif au serveur MySQL ou MariaDB restauré. Assurez-vous que le nouveau mot de passe Root que vous avez choisi est fort et sécurisé et conservez-le dans un endroit sûr.

1 votes

L'instruction ALTER USER a été introduite dans MariaDB 10.2.0.

3 votes

Wow ! cette ligne même mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost'; a été un tel sauveur de vie pour moi !

0 votes

J'utilise MariaDB 10.3.25 et cela a fonctionné : mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

40voto

Fab Points 1773

Pour les utilisateurs d'Ubuntu/Debian

(Il peut fonctionner sur d'autres distributions, notamment celles basées sur Debian).

Exécutez la commande suivante pour vous connecter en tant que root (sans mot de passe)

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

Si vous ne voulez pas ajouter --defaults-file chaque fois que vous voulez vous connecter en tant que root vous pouvez copier /etc/mysql/debian.cnf dans votre répertoire personnel :

sudo cp /etc/mysql/debian.cnf ~/.my.cnf

Et puis :

sudo mysql

3 votes

C'est tout ce qu'il fallait. "Root" n'est pas "Root" par défaut sur Ubuntu, apparemment.

20voto

Amit Kr Points 28

Pour les nouveaux utilisateurs de Linux, cela peut être une tâche décourageante. Laissez-moi mettre à jour ceci avec MySQL 8 (la dernière version disponible actuellement est 8.0.12 au 2018-09-12).

  1. Ouvrez le fichier de configuration "mysqld.cnf" dans "/etc/mysql/mysql.conf.d/".
  2. Añadir skip-grant-tables à la ligne suivante du texte [mysql] et enregistrez.
  3. Redémarrez le service MySQL par "sudo service mysql restart". Maintenant votre MySQL est libre de toute authentification.
  4. Connectez-vous au client MySQL (également connu sous le nom de mysql-shell) en tant que mysql -u Root -p . Il n'y a pas de mot de passe à saisir pour l'instant.
  5. Exécuter une commande SQL les privilèges de la chasse d'eau ;
  6. Réinitialiser le mot de passe maintenant comme ALTER USER 'Root'@'localhost' IDENTIFIÉ PAR 'MyNewPassword' ;
  7. Maintenant, revenons à l'état normal ; supprimez la ligne "skip-grant-tables" de "mysqld.cnf" et redémarrez le service.

C'est tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X