MySQL ERROR 1045 (28000): Accès refusé pour l’utilisateur ‘facture’ @ ‘localhost’ (mot de passe: OUI)

Tout d’abord, permettez-moi de mentionner que j’ai parcouru de nombreuses questions suggérées et que je n’ai trouvé aucune réponse pertinente. Voici ce que je fais.

Je suis connecté à mon instance Amazon EC2. Je peux me connecter avec MySQL root avec cette commande:

mysql -u root -p 

Ensuite, j’ai créé une nouvelle facture utilisateur avec l’hôte%

 CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass'; 

Accordé tous les privilèges à la facture utilisateur:

 grant all privileges on *.* to 'bill'@'%' with grant option; 

Ensuite, je quitte l’utilisateur root et tente de me connecter avec la facture:

 mysql -u bill -p 

entré le mot de passe correct et obtenu cette erreur:

ERROR 1045 (28000): Accès refusé à l’utilisateur ‘bill’ @ ‘localhost’ (mot de passe: OUI)

Vous avez probablement un utilisateur anonyme ''@'localhost' ou ''@'127.0.0.1' .

Selon le manuel :

Lorsque plusieurs correspondances sont possibles, le serveur doit déterminer lesquelles utiliser. Il résout ce problème comme suit: (…)

  • Lorsqu’un client tente de se connecter, le serveur examine les lignes [de la table mysql.user] dans l’ordre sortingé.
  • Le serveur utilise la première ligne correspondant au nom d’hôte et au nom d’utilisateur du client.

(…) Le serveur utilise d’abord des règles de sorting qui ordonnent les lignes avec les valeurs d’hôte les plus spécifiques . Les noms d’hôte littéraux [tels que «localhost»] et les adresses IP sont les plus spécifiques.

Par conséquent, un tel utilisateur anonyme “masquerait” tout autre utilisateur comme '[any_username]'@'%' lors de la connexion à partir de localhost .

'bill'@'localhost' correspond à 'bill'@'%' , mais correspond (par exemple) au préalable ''@'localhost' .

La solution recommandée consiste à supprimer cet utilisateur anonyme (c’est généralement une bonne chose à faire).


Les modifications ci-dessous ne concernent généralement pas la question principale. Ceux-ci ne sont destinés qu’à répondre à certaines questions soulevées dans d’autres commentaires dans ce fil.

Modifier 1

Authentification en tant que 'bill'@'%' via un socket.


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
     Bienvenue sur le moniteur MySQL (...)

     mysql> SELECT user, host FROM mysql.user;
     + ------ + ----------- +
     |  utilisateur |  hôte |
     + ------ + ----------- +
     |  facture |  % |
     |  racine |  127.0.0.1 |
     |  racine |  :: 1 |
     |  racine |  localhost |
     + ------ + ----------- +
     4 lignes dans l'ensemble (0.00 sec)

     mysql> SELECT USER (), CURRENT_USER ();
     + ---------------- + ---------------- +
     |  USER () |  CURRENT_USER () |
     + ---------------- + ---------------- +
     |  bill @ localhost |  bill @% |
     + ---------------- + ---------------- +
     1 rangée dans le set (0.02 sec)

     mysql> SHOW VARIABLES LIKE 'skip_networking';
     + ----------------- + ------- +
     |  Nom_variable  Valeur |
     + ----------------- + ------- +
     |  skip_networking |  ON |
     + ----------------- + ------- +
     1 rangée dans l'ensemble (0.00 sec)

Modifier 2

Exactement la même configuration, sauf que j’ai réactivé le réseau et que je crée maintenant un utilisateur anonyme ''@'localhost' .


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
     Bienvenue sur le moniteur MySQL (...)

     mysql> CREATE USER '' @ 'localhost' IDENTIFIED BY 'anotherpass';
     Requête OK, 0 lignes affectées (0.00 sec)

     mysql> Bye

     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         --socket = / tmp / mysql-5.5.sock
     ERROR 1045 (28000): Accès refusé à l'utilisateur 'bill' @ 'localhost' (mot de passe: OUI)
     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         -h127.0.0.1 --protocol = TCP
     ERROR 1045 (28000): Accès refusé à l'utilisateur 'bill' @ 'localhost' (mot de passe: OUI)
     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
         -hlocalhost --protocol = TCP
     ERROR 1045 (28000): Accès refusé à l'utilisateur 'bill' @ 'localhost' (mot de passe: OUI)

Modifier 3

Même situation que dans l’édition 2, fournissant maintenant le mot de passe de l’utilisateur anonyme.


     root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
     Bienvenue sur le moniteur MySQL (...)

     mysql> SELECT USER (), CURRENT_USER ();
     + ---------------- + ---------------- +
     |  USER () |  CURRENT_USER () |
     + ---------------- + ---------------- +
     |  bill @ localhost |  @localhost |
     + ---------------- + ---------------- +
     1 rangée dans le jeu (0.01 sec)

Conclusion 1, à partir de l’édition 1: on peut s’authentifier en tant que 'bill'@'%' via une socket.

Conclusion 2, à partir de edit 2: Que l’on se connecte via TCP ou via un socket n’a aucun impact sur le processus d’authentification (sauf qu’on ne peut pas se connecter comme un autre mais 'something'@'localhost' via un socket, évidemment).

Conclusion 3, à partir de l’édition 3: Bien que j’ai spécifié -ubill , l’access en tant qu’utilisateur anonyme m’a été accordé. C’est à cause des “règles de sorting” conseillées ci-dessus. Notez que dans la plupart des installations par défaut, un utilisateur anonyme sans mot de passe existe (et doit être sécurisé / supprimé).

Essayer:

 ~$ mysql -u root -p Enter Password: mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option; 

Quand tu as couru

 mysql -u bill -p 

et a eu cette erreur

 ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) 

mysqld s’attend à ce que vous vous connectiez en tant que bill@localhost

Essayez de créer bill@localhost

 CREATE USER bill@localhost IDENTIFIED BY 'passpass'; grant all privileges on *.* to bill@localhost with grant option; 

Si vous souhaitez vous connecter à distance, vous devez spécifier le nom DNS, l’adresse IP publique ou 127.0.0.1 à l’aide de TCP / IP:

 mysql -u bill -p [email protected] mysql -u bill -p -h10.1.2.30 mysql -u bill -p -h127.0.0.1 --protocol=TCP 

Une fois connecté, veuillez lancer cette opération

 SELECT USER(),CURRENT_USER(); 

USER () indique comment vous avez tenté de vous authentifier dans MySQL

CURRENT_USER () indique comment vous avez été autorisé à vous authentifier dans MySQL à partir de la table mysql.user

Cela vous donnera une meilleure idée de comment et pourquoi vous avez été autorisé à vous connecter à mysql. Pourquoi cette vue est-elle importante à savoir? Cela concerne le protocole de commande d’authentification de l’utilisateur.

Voici un exemple: je vais créer un utilisateur anonyme sur mon bureau MySQL

 mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 7 rows in set (0.00 sec) mysql> grant all on *.* to x@'%'; Query OK, 0 rows affected (0.02 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | lwdba | % | | mywife | % | | x | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql> update mysql.user set user='' where user='x'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user,host from mysql.user; +---------+-----------+ | user | host | +---------+-----------+ | | % | | lwdba | % | | mywife | % | | lwdba | 127.0.0.1 | | root | 127.0.0.1 | | lwdba | localhost | | root | localhost | | vanilla | localhost | +---------+-----------+ 8 rows in set (0.00 sec) mysql> 

OK regarde-moi me connecter en tant qu’utilisateur anonyme:

 C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.5.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select user(),current_user(); +---------------+----------------+ | user() | current_user() | +---------------+----------------+ | rol@localhost | @% | +---------------+----------------+ 1 row in set (0.00 sec) mysql> 

La commande d’authentification est très ssortingcte. Il vérifie du plus spécifique au moins. J’ai écrit à propos de ce style d’authentification dans le DBA StackExchange .

N’oubliez pas d’appeler explicitement TCP comme protocole pour le client mysql si nécessaire.

Lorsque vous tapez mysql -u root -p , vous vous connectez au serveur mysql via un socket unix local.

Quelle que soit la subvention que vous avez accordée, 'bill'@'%' ne correspond que curieusement aux connexions TCP / IP.

Si vous souhaitez accorder l’access au socket unix local, vous devez accorder des privilèges à «bill ‘@’ localhost», ce qui curieusement n’est pas la même chose que «bill’@’127.0.0.1».

Vous pouvez également vous connecter en utilisant TCP / IP avec le client de ligne de commande mysql, afin de correspondre aux privilèges que vous avez déjà accordés, par exemple, exécutez mysql -u root -p -h 192.168.1.123 ou l’adresse IP locale de votre boîte.

Si vous oubliez votre mot de passe ou si vous souhaitez modifier votre mot de passe, procédez comme suit:

1: arrêtez votre mysql

[root @ maomao ~] # service mysqld stop
Arrêter MySQL: [OK]

2: utiliser “–skip-grant-tables” pour redémarrer mysql

[root @ mcy400 ~] # mysqld_safe –skip-grant-tables
[root @ cy400 ~] # Démarrage du démon mysqld avec les bases de données de / var / lib / mysql

3: ouvrez une nouvelle fenêtre et entrez mysql -u root

[root @ cy400 ~] # mysql -u root
Bienvenue sur le moniteur MySQL. Les commandes se terminent par; ou \ g.

4: modifier la firebase database utilisateur

mysql> utilise mysql
Lecture des informations de la table pour compléter les noms de table et de colonne Vous pouvez désactiver cette fonctionnalité pour obtenir un démarrage plus rapide avec l’option -A Database

5: modifier votre mot de passe votre nouveau mot de passe doit être entré dans “()”

mysql> update user set password = mot de passe (‘root123’) où user = ‘root’;
Requête OK, 3 lignes affectées (0.00 sec)
Lignes alignées: 3 Modifié: 3 Avertissements: 0

6: flush

mysql> privilèges de vidage;

7: quitter

mysql> quitter
Au revoir

8: redémarrez mysql

[root @ cy400 ~] # service mysqld restart;
Arrêter MySQL: [OK]
Démarrer MySQL: [OK]

Bingo! Vous pouvez connecter votre firebase database avec votre nom d’utilisateur et votre nouveau mot de passe:

 [root@cy400 ~]# mysql -u root -p 
Enter password: admin123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.77 Source dissortingbution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> quit
Bye

Un problème connexe dans mon cas essayait de se connecter en utilisant:

 mysql -u mike -p mypass 

Whitespace IS apparemment autorisé entre -u # uname # mais pas entre -p et # password #

Donc nécessaire:

 mysql -u mike -pmypass 

Sinon, avec un espace blanc entre -p mypass, mysql prend ‘mypass’ comme nom de firebase database

Epargnez-vous un mal de tête MAJEUR … Votre problème pourrait être que vous manquez les guillemets autour du mot de passe. Au moins c’était mon cas qui m’a détourné pendant 3 heures.

 [client] user = myusername password = "mypassword" # <----------------------- VERY IMPORTANT (quotes) host = localhost 

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Recherchez "Voici un fichier d'options utilisateur typique" et voyez l'exemple qu'ils contiennent. Bonne chance et j'espère sauver quelqu'un d'autre.

La solution consiste à supprimer l’utilisateur anonyme (Any)!

J’ai également rencontré le même problème sur une configuration de serveur par quelqu’un d’autre. Normalement, je ne choisis pas de créer un utilisateur anonyme lors de l’installation de MySQL, donc je ne l’avais pas remarqué. Au début, je me suis connecté en tant qu’utilisateur “root” et j’ai créé quelques utilisateurs “normaux” (utilisateurs avec des privilèges uniquement sur les dbs avec leur nom d’utilisateur comme préfixe), puis déconnecté, puis vérifié le premier utilisateur normal. Je ne pouvais pas me connecter. Ni via phpMyAdmin, ni via shell. Il s’avère que le coupable est cet “Tout” utilisateur.

Super tard pour ça

J’ai essayé toutes ces autres réponses et j’ai couru plusieurs versions différentes de mysql -u root -p mais je n’ai jamais couru


mysql -u root -p

Et appuyez simplement sur [ENTER] pour le mot de passe.


Une fois que j’ai fait ça, ça a fonctionné. J’espère que cela aide quelqu’un.

La meilleure solution que j’ai trouvée pour moi est.

mon utilisateur est sonar et chaque fois que j’essaie de me connecter à une firebase database externe ou autre, je reçois une erreur comme

 ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES) 

Aussi comme j’essaye ceci d’une autre machine et par le travail de Jenkins mon URL pour accéder est

 alm-lt-test.xyz.com 

Si vous souhaitez vous connecter à distance, vous pouvez le spécifier de différentes manières comme suit:

 mysql -u sonar -p -halm-lt-test.xyz.com mysql -u sonar -p -h101.33.65.94 mysql -u sonar -p -h127.0.0.1 --protocol=TCP mysql -u sonar -p -h172.27.59.54 --protocol=TCP 

Pour y accéder avec une URL, il vous suffit d’exécuter la requête suivante.

 GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar'; 

Ok, je ne suis pas sûr, mais c’est probablement le fichier my.cnf dans le répertoire d’installation de mysql qui est le coupable. Commentez cette ligne et le problème pourrait être résolu.

 bind-address = 127.0.0.1 

C’est une différence entre:

 CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass'; 

et

 CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass'; 

Vérifie ça:

 mysql> select user,host from mysql.user; +---------------+----------------------------+ | user | host | +---------------+----------------------------+ | bill | % | <=== created by first | root | 127.0.0.1 | | root | ::1 | | root | localhost | | bill | localhost | <=== created by second +---------------+----------------------------+ 

La commande

 mysql -u bill -p 

access implicite à 'bill' @ 'localhost' et PAS à 'facture' @ '%'.

Il n'y a pas d'permissions pour 'bill' @ 'localhost'

vous obtenez l'erreur:

 ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) 

résoudre le problème:

 CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass'; grant all privileges on . to 'bill'@'localhost' with grant option; 

Cela se produit également lorsque votre mot de passe contient des caractères spéciaux tels que @, $, etc. Pour éviter cette situation, vous pouvez envelopper le mot de passe entre guillemets simples:

 $ mysql -usomeuser -p's0mep@$$w0Rd' 

Ou bien n’utilisez pas le mot de passe en entrant. Laissez le champ vide et tapez-le lorsque le terminal vous le demande. C’est la méthode recommandée.

 $ mysql -usomeuser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 191 Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 

Je voulais juste vous faire savoir une circonstance inhabituelle, j’ai reçu la même erreur. Peut-être que cela aide quelqu’un à l’avenir.

J’avais développé quelques vues de base, créées sur le site de développement et transférées sur le site de production. Plus tard dans la semaine, j’ai modifié un script PHP et soudain, des erreurs ont été signalées, à savoir qu’Access a été refusé à l’utilisateur ‘local-web-user’ @ ‘localhost’. L’object datasource n’ayant pas changé, je me suis concentré sur l’utilisateur de la firebase database dans MySQL, en m’inquiétant en attendant que quelqu’un pirate mon site. Heureusement, le rest du site semblait sain et sauf.

Il s’est avéré plus tard que les vues étaient le ou les coupables. Nos transferts d’objects sont effectués en utilisant un autre utilisateur (et distant: admin @ ip-address) que l’utilisateur du site Web local. Les vues ont donc été créées avec ‘admin’ @ ‘ip-address’ comme définisseur. La création de vue SECURITY par défaut est

 SQL SECURITY DEFINER 

Lorsque l’utilisateur Web local essaie d’utiliser la vue, il se heurte aux privilèges manquants du définiteur pour utiliser les tables. Une fois la sécurité modifiée:

 SQL SECURITY INVOKER 

le problème a été résolu. Le problème réel était complètement différent de celui prévu en fonction du message d’erreur.

Je ne sais pas si quelqu’un d’autre trouvera cela utile, mais j’ai rencontré la même erreur et cherché partout des utilisateurs anonymes … et il n’y en avait pas. Le problème a été que le compte d’utilisateur était défini sur “Require SSL” – que j’ai trouvé dans PHPMyAdmin en allant dans Comptes d’utilisateurs et en cliquant sur Modifier les privilèges pour l’utilisateur. Dès que j’ai décoché cette option, tout fonctionnait comme prévu!

Pour moi, ce problème était dû à une nouvelle fonctionnalité de MySQL 5.7.2: user entrées user sont ignorées si leur champ est vide.

Définissez-le sur mysql_native_password par mysql_native_password pour les réactiver:

 UPDATE user SET plugin='mysql_native_password' WHERE user='foo'; FLUSH PRIVILEGES; 

Voir les notes de publication pour MySQL 5.7.2 , sous «Notes d’authentification».

Pour une raison quelconque (peut-être parce que mes hachages de mots de passe antérieurs à 4.1 ont été supprimés), le script mysql_upgrade n’a pas défini de valeur de plug-in par défaut.

J’ai découvert en notant le message d’avertissement suivant dans /var/log/mysql/error.log :

[Avertissement] L’entrée utilisateur ‘foo’ @ ‘%’ a une valeur de plugin vide. L’utilisateur sera ignoré et personne ne pourra plus se connecter avec cet utilisateur.

Je poste cette réponse ici pour peut-être sauver quelqu’un d’utiliser le même temps ridicule que moi.

J’espère que vous n’avez pas fait plus de dégâts en supprimant également l’utilisateur debian-sys-maint dans mysql

Faites fonctionner votre démon mysql normalement. Démarrez votre client mysql comme indiqué ci-dessous

 mysql -u debian-sys-maint -p 

Dans un autre terminal, /etc/mysql/debian.cnf le fichier /etc/mysql/debian.cnf . Ce fichier contient un mot de passe; collez ce mot de passe lorsque vous y êtes invité.

http://ubuntuforums.org/showthread.php?t=1836919

Résumé du débogage

  • Vérifiez la faute de frappe: nom d’utilisateur ou mot de passe.
  • Vérifiez le nom d’hôte et comparez-le avec le nom d’hôte de la table mysql.user.
  • Vérifiez que l’utilisateur existe ou non.
  • Vérifiez si l’hôte contient l’adresse IP ou le nom d’hôte.

Il est fort probable que vous ayez rencontré ce problème plusieurs fois dans votre travail. Ce problème est survenu la plupart du temps en raison de la saisie incorrecte du nom d’utilisateur ou du mot de passe. Bien que ce soit l’une des raisons, il ya d’autres chances que vous renconsortingez ce problème. Parfois, il semble très similaire, mais lorsque vous approfondissez, vous réaliserez plusieurs facteurs consortingbuant à cette erreur. Cet article expliquera en détail, la plupart des raisons communes et travaillera pour résoudre ce problème.

Raisons possibles:

  • Cas 1: Erreur typo: nom d’utilisateur ou mot de passe.

C’est la raison la plus courante de cette erreur. Si vous avez entré le nom d’utilisateur ou le mot de passe à tort, vous obtiendrez sûrement cette erreur.

Solution:

La solution à ce type d’erreur est très simple. Entrez simplement le nom d’utilisateur et le mot de passe corrects. Cette erreur sera résolue. Si vous oubliez le mot de passe, vous pouvez réinitialiser le nom d’utilisateur / mot de passe. Si vous oubliez le mot de passe du compte admin / root, il existe plusieurs manières de réinitialiser / recapturer le mot de passe root. Je publierai un autre article sur la façon de réinitialiser le mot de passe root en cas d’oubli du mot de passe root.

  • Cas 2: Accès à partir d’un hôte incorrect.

MySQL fournit des ressortingctions basées sur l’hôte pour l’access des utilisateurs en tant que fonctions de sécurité. Dans notre environnement de production, nous restreignions uniquement la demande d’access aux serveurs d’applications. Cette fonctionnalité est vraiment utile dans de nombreux scénarios de production.

Solution:

Lorsque vous rencontrez ce type de problème, vérifiez d’abord si votre hôte est autorisé ou non en consultant la table mysql.user. S’il n’est pas défini, vous pouvez mettre à jour ou insérer un nouvel enregistrement dans la table mysql.user. En règle générale, l’access en tant qu’utilisateur root à partir d’une machine distante est désactivé et ce n’est pas une bonne pratique en raison de problèmes de sécurité. Si vous avez besoin d’accéder à votre serveur à partir de plusieurs machines, n’accordez l’access qu’à ces machines. Il vaut mieux ne pas utiliser de caractères génériques (%) et donner des access universels. Permettez-moi de mettre à jour la table mysql.user, maintenant le démouser peut accéder au serveur MySQL depuis n’importe quel hôte.

  • Cas 3: l’utilisateur n’existe pas sur le serveur.

Ce type d’erreur se produit lorsque l’utilisateur que vous tentez d’accéder n’existe pas sur le serveur MySQL.

Solutions:

Lorsque vous rencontrez ce type de problème, vérifiez simplement si l’utilisateur existe dans la table mysql.user ou non. Si l’enregistrement n’existe pas, l’utilisateur ne peut y accéder. Si cet utilisateur a besoin d’accéder, créez un nouvel utilisateur avec ce nom d’utilisateur.

  • Cas 4: mélange d’hôtes numériques et d’hôtes basés sur des noms.

Les points importants

  • Il est déconseillé d’utiliser des caractères génériques lors de la définition de l’hôte utilisateur, essayez d’utiliser le nom d’hôte exact.

  • Désactiver la connexion root depuis une machine distante.

  • Utilisez le concept d’utilisateur proxy.

Il y a peu d’autres concepts liés à ce sujet et entrer dans les détails de ces sujets est une scope très différente de cet article. Nous examinerons les sujets suivants dans les prochains articles.

  • Que faire si vous avez oublié le mot de passe root du serveur MySQL.
  • Problèmes de privilèges d’access MySQL et tables liées aux utilisateurs.
  • Fonctions de sécurité MySQL avec les meilleures pratiques.

J’espère que ce post vous aidera à corriger le code d’erreur MySQL 1045 Access refusé pour l’utilisateur dans MySQL.

Sur la fenêtre, Comment résoudre ERROR 1045 (28000): Accès refusé pour l’utilisateur ‘root’ @ ‘localhost’ (en utilisant le mot de passe: NO)

 1) Uninstall mysql from control panel 2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData 3)Install mysql 

J’ai résolu ce problème en supprimant les anciennes entrées “bill” de l’utilisateur buggé (c’est la partie importante de mysql.user et de mysql.db ), puis j’ai créé le même utilisateur que précédemment:

 FLUSH PRIVILEGES; CREATE USER bill@localhost IDENTIFIED BY 'passpass'; grant all privileges on *.* to bill@localhost with grant option; FLUSH PRIVILEGES; 

Travaillé, l’utilisateur se connecte. Maintenant, j’enlève quelques previlegies 🙂

J’ai eu un problème assez similaire – lors de ma première tentative pour entrer MySQL, en tant que root, il m’a dit que l’access était refusé. Il s’avère que j’ai oublié d’utiliser le sudo …

Donc, si vous échouez à la première tentative de root, essayez:

sudo mysql -u root -p

et ensuite entrez votre mot de passe, cela devrait fonctionner.

J’ai rencontré la même erreur. La configuration qui ne fonctionnait pas est la suivante:

 define("HOSTNAME", "localhost"); define("HOSTUSER", "van"); define("HOSTPASS", "helsing"); define("DBNAME", "crossbow"); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS); 

La configuration modifiée ci-dessous est celle qui a fonctionné. Remarquez la différence?

 define('HOSTNAME', 'localhost'); define('HOSTUSER', 'van'); define('HOSTPASS', 'helsing'); define('DBNAME', 'crossbow'); $connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS); 

La différence réside dans les guillemets doubles. Ils semblent être assez significatifs en PHP par rapport à Java et ils ont un impact sur l’échappement de caractères, la configuration d’URL et maintenant, le passage de parameters à une fonction. Ils sont plus jolis (je sais), mais utilisez toujours autant que possible des guillemets simples, puis des guillemets doubles peuvent être nesteds si nécessaire.

Cette erreur est apparue lorsque j’ai testé mon application sur une machine Linux par opposition à un environnement Windows.

Les noms de compte MySQL se composent d’un nom d’utilisateur et d’un nom d’hôte. Le nom ‘localhost’ dans le nom d’hôte indique également l’hôte local. Vous pouvez utiliser les caractères génériques «%» et Celles-ci ont la même signification que pour les opérations de correspondance de modèle effectuées avec l’opérateur LIKE. Par exemple, une valeur d’hôte de ‘%’ correspond à n’importe quel nom d’hôte, tandis qu’une valeur de ‘% .mysql.com’ correspond à n’importe quel hôte du domaine mysql.com. ‘192.168.1.%’ Correspond à tout hôte du réseau 192.168.1 de classe C.

Ci-dessus était juste l’introduction:

En fait, les deux utilisateurs 'bill'@'localhost' et 'bill'@'%' sont des comptes MySQL différents, donc tous deux doivent utiliser leurs propres détails d’authentification, comme le mot de passe.

Pour plus d’informations, reportez-vous à http://dev.mysql.com/doc/refman//5.5/fr/account-names.html

Lorsque vous exécutez mysql -u bill -p , localhost est résolu sur votre ip, car il s’agit de 127.0.0.1 et dans votre fichier /etc/hosts , par défaut, 127.0.0.1 localhost existe. Donc, mysql vous interprète comme bill@localhost qui n’est pas accordé avec bill@'%' . C’est la raison pour laquelle il existe deux enregistrements différents pour root utilisateur root en fonction de l’ select host, user from mysql.user; question.

Il existe deux manières de gérer ce problème.

On spécifie une adresse IP non résolue par le fichier /etc/hosts lorsque vous essayez de vous connecter. Par exemple, l’adresse IP du serveur est 10.0.0.2 . Lorsque vous exécuterez la commande mysql -u bill -p -h 10.0.0.2 , vous pourrez vous connecter. Si vous tapez select user(); , vous recevrez [email protected] . Bien entendu, aucun nom de domaine ne doit être résolu sur cette adresse IP dans votre fichier /etc/hosts .

Deuxièmement, vous devez accorder un access pour ce nom de domaine spécifique. Pour bill@localhost , vous devez appeler commande grant all privileges on *.* to bill@localhost identified by 'billpass'; . Dans ce cas, vous pourrez vous connecter avec la commande mysql -u bill -p . Une fois connecté, select user(); La commande retourne bill@localhost .

Mais c’est uniquement pour cela que vous essayez de vous connecter à un serveur mysql sur le même hôte. À partir des hôtes distants, mysql se comporte normalement, ‘%’ vous autorisera à vous connecter.

Assurez-vous qu’aucune autre instance SQL en cours d’exécution n’utilise le message localhost. Dans notre cas, une autre instance fonctionnait sur l’hôte local qui était en conflit avec la connexion. La désactivation a résolu ce problème.

Le problème peut également se produire si vous utilisez une ancienne version de l’interface utilisateur MySQL (comme SQLYoug) qui génère des mots de passe avec un hachage incorrect.

Créer un utilisateur avec un script SQL résoudra le problème.

J’ai eu le même problème, mais dans mon cas, la solution a été résolue par le commentaire de eggyal. J’avais aussi un utilisateur anonyme, mais sa suppression ne résout pas le problème. La commande ‘FLUSH PRIVILEGES’ fonctionnait bien.

Ce qui m’a étonné, c’est que j’ai créé l’utilisateur avec MySQL Workbench et je m’attendais à ce que toutes les fonctions nécessaires soient accomplies.

The percent sign means all ip’s so localhost is superfluous … There is no need of the second record with the localhost .

Actually there is, ‘localhost’ is special in mysql, it means a connection over a unix socket (or named pipes on windows I believe) as opposed to a TCP/IP socket. using % as the host does not include ‘localhost’

MySQL user accounts have two components: a user name and a host name. The user name identifies the user, and the host name specifies what hosts that user can connect from. The user name and host name are combined to create a user account:

''@'' You can specify a specific IP address or address range for host name, or use the percent character (“%”) to enable that user to log in from any host.

Note that user accounts are defined by both the user name and the host name. For example, 'root'@'%' is a different user account than 'root'@'localhost' .

I had the same issue as the OP while trying to access a MYSQL docker container built with compose that had a really long password:

 # docker-compose.yml snippet services: db: environment: MYSQL_ROOT_PASSWORD: some_password_more_than_32_characters 

Reducing the password length and rebuilding via compose enabled me to access the MYSQL container with a client like Workbench.

For Mac users if they still have the problem (as was my case), I found this solution worked for me: MySQL command line ‘-bash command not found’

To use command ie mysql on macbook terminal you need to export path using:

 export PATH=$PATH:/usr/local/mysql/bin/ 

Considering default installation, use following command to get mysql prompt as root user:

 mysql -u root 

Otherwise you are using wrong root password.

Ref: Setting the MySQL root user password on OSX