Maison >base de données >tutoriel mysql >Pourquoi MySQL renvoie-t-il l'erreur 1045 : accès refusé même avec des informations d'identification correctes ?

Pourquoi MySQL renvoie-t-il l'erreur 1045 : accès refusé même avec des informations d'identification correctes ?

DDD
DDDoriginal
2024-12-17 04:28:25734parcourir

Why Does MySQL Return Error 1045: Access Denied Even with Correct Credentials?

Erreur MySQL 1045 : accès refusé pour l'utilisateur 'bill'@'localhost' malgré des informations d'identification correctes

Lors de la tentative d'accès à une base de données MySQL distante via la ligne de commande, les utilisateurs peuvent occasionnellement rencontrer le message « Erreur 1045 : Accès refusé pour l'utilisateur 'bill'@'localhost' » message, indiquant que la connexion a été rejetée malgré la fourniture des informations de connexion correctes.

Enquête :

L'utilisateur a créé un nouvel utilisateur nommé « bill », accordé à l'utilisateur tous les privilèges nécessaires, puis quittez le compte utilisateur root. Cependant, les tentatives ultérieures de connexion en tant qu'utilisateur « facture » ​​à partir de la machine locale (« localhost ») entraînent l'erreur.

Cause première :

Souvent, cela le problème survient en raison de la présence d'un utilisateur anonyme (un utilisateur avec un nom d'utilisateur vide et « localhost » comme hôte) dans la table « mysql.user ». Lors de la connexion à partir de « localhost », le serveur donne la priorité aux comptes d'utilisateurs correspondants en fonction du nom d'hôte ou de l'adresse IP le plus spécifique.

Solution 1 : Supprimer l'utilisateur anonyme

Pour résoudre le problème, supprimez l'utilisateur anonyme de la table 'mysql.user' :

DELETE FROM mysql.user WHERE user = '' AND host = 'localhost';

Solution 2 (pour MySQL Versions >= 5.7) :

Si vous utilisez MySQL version 5.7 ou ultérieure, vous pouvez désactiver l'utilisation de comptes anonymes via la variable 'skip_name_resolve' :

SET GLOBAL skip_name_resolve = ON;

Considérations supplémentaires :

Prise Connexions :

Dans l'exemple fourni, l'utilisateur se connecte via une socket. Il est important de s'assurer que les champs « utilisateur » et « mot de passe » sont correctement spécifiés, car tout utilisateur anonyme configuré dans le chemin de connexion peut potentiellement remplacer les informations d'identification fournies.

Connexions TCP :

Lors d'une connexion via TCP, l'indicateur -h doit être utilisé pour spécifier le nom d'hôte ou l'adresse IP, par opposition à localhost :

mysql -u bill -p -hremote_hostname

Noms d'utilisateur vides :

Certaines bibliothèques clientes ne gèrent pas correctement les noms d'utilisateur vides. Au lieu de '', le symbole '@' doit être utilisé pour désigner un utilisateur anonyme :

mysql -u'@'localhost'-ppassword

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn