web-dev-qa-db-fra.com

MySQL ERROR 1045 (28000): Accès refusé pour l'utilisateur 'bill' @ 'localhost' (avec mot de passe: YES)

Permettez-moi d'abord 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 la racine MySQL avec cette commande:

mysql -u root -p

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

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

A accordé tous les privilèges à la facture utilisateur:

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

Ensuite, je quitte l’utilisateur root et essaie de me connecter avec bill:

mysql -u bill -p

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

ERROR 1045 (28000): Accès refusé pour l'utilisateur 'bill' @ 'localhost' (avec mot de passe: YES)

354
Ali

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 lequel des à utiliser. Il résout ce problème comme suit: (...)

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

(...) Le serveur utilise des règles de tri qui classent d’abord les lignes avec les valeurs d’hôte les plus spécifiques . Les noms d'hôtes 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 tel que '[any_username]'@'%' lors de la connexion à partir de localhost.

'bill'@'localhost' correspond à 'bill'@'%', mais correspondrait auparavant (par exemple) ''@'localhost'.

La solution recommandée consiste à supprimer cet utilisateur anonyme (c'est généralement une bonne chose à faire de toute façon).


Les modifications ci-dessous ne concernent généralement pas la question principale. Elles ne sont destinées qu'à répondre à certaines questions soulevées dans d'autres commentaires de 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 utilisateur, hôte FROM mysql.user; 
 + ------ + ----------- + 
 | utilisateur | Hôte | 
 + ------ + ----------- + 
 | facture | % | 
 | racine | 127.0.0.1 | 
 | racine | :: 1 | 
 | racine | localhost | 
 + ------ + ----------- + 
 4 rangées dans le jeu (0.00 sec) 

 mysql> SELECT USER (), CURRENT_USER (); 
 + ---------------- + ---------------- + 
 | UTILISATEUR () | CURRENT_USER () | 
 + ---------------- + ---------------- + 
 | facture @ localhost | facture @% | 
 + ---------------- + ---------------- + 
 1 ligne dans le set (0.02 sec) 

 mysql> AFFICHER LES VARIABLES LIKE 'skip_networking'; 
 + ----------------- + ------- + 
 | Nom_variable | Valeur | 
 + ----------------- + ------- + 
 | skip_networking | ON | 
 + ----------------- + ------- + 
 1 ligne dans le jeu (0.00 sec) 

Edit 2

Même configuration exacte, sauf que j'ai réactivé la mise en 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 par 'anotherpass'; 
 Requête OK, 0 ligne affectée (0,00 s) 

 mysql> Au revoir 

 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é pour l'utilisateur 'bill' @ 'localhost' (en utilisant le mot de passe: YES) 
 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é pour l'utilisateur 'bill' @ 'localhost' (en utilisant le mot de passe: YES) 
 root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass\
 -hlocalhost --protocol = TCP 
 ERREUR 1045 (28000): Accès refusé pour l'utilisateur 'bill' @ 'localhost' (avec mot de passe: YES) 

Edit 3

Même situation que dans Edit 2, fournissant désormais 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 (); 
 + ---------------- + ---------------- + 
 | UTILISATEUR () | CURRENT_USER () | 
 + ---------------- + ---------------- + 
 | facture @ localhost | @localhost | 
 + ---------------- + ---------------- + 
 1 ligne dans le set (0.01 sec) 

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

Conclusion 2, de la modification 2: le fait de se connecter via TCP ou via un socket n’a aucun impact sur le processus d’authentification (sauf que l’on ne peut pas se connecter en tant que personne mais 'something'@'localhost' via un socket, évidemment).

Conclusion 3, de la modification 3: Bien que j'ai spécifié -ubill, l'accès en tant qu'utilisateur anonyme a été accordé. Ceci est dû aux "règles de tri" indiqué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é).

394
RandomSeed

Essayer:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
126
Edgar Aviles

Quand tu as couru 

mysql -u bill -p

et a 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 que vous vous êtes connecté, lancez ceci

SELECT USER(),CURRENT_USER();

USER () indique comment vous avez tenté de vous authentifier avec 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 à connaître? Cela concerne le protocole de commande d'authentification d'utilisateur.

Voici un exemple: Je vais créer un utilisateur anonyme sur mon ordinateur 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 stricte. Il vérifie du plus spécifique au moins spécifique. J'ai écrit sur ce style d'authentification dans DBA StackExchange .

N'oubliez pas d'appeler explicitement pour TCP en tant que protocole pour le client mysql lorsque cela est nécessaire.

64
RolandoMySQLDBA

Si vous oubliez votre mot de passe ou si vous souhaitez modifier votre mot de passe.Vous pouvez suivre ces étapes:

1: arrêtez votre mysql

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

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

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

3: ouvre une nouvelle fenêtre et entre mysql -u root

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

4: changer la base de données utilisateur

mysql> utiliser mysql 
Lecture des informations de 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 -A Base de données modifiée

5: modifiez votre mot de passe votre nouveau mot de passe doit être entré dans ")"

mysql> update user set motdepasse = motdepasse ('root123') où utilisateur = 'root'; 
Requête OK, 3 lignes affectées (0.00 sec) 
Lignes correspondantes: 3 Changement: 3 Avertissements: 0

6: chasse d'eau

mysql> privilèges de vidage;

7: quitter

mysql> quitter 
Au revoir

8: redémarrer mysql

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

Bingo Vous pouvez connecter votre base de données avec votre nom d'utilisateur et votre nouveau mot de passe:

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

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

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

Si vous souhaitez accorder l'accès au socket Unix local, vous devez octroyer des privilèges à 'bill' @ 'localhost', ce qui n'est curieusement pas le même que 'bill'@'127.0.0.1'

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

14
nos

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

mysql -u mike -p mypass

Espace blanc IS apparemment autorisé entre -u # uname # maisPASentre -p et # mot de passe #

Donc nécessaire:

mysql -u mike -pmypass

Sinon, avec un espace entre -p mypass mysql prend 'mypass' en tant que db name

14
mstram

Epargnez-vous d'un mal de tête MAJEUR ... Votre problème peut être lié au fait qu'il vous manque des 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’il indique. Bonne chance et j'espère sauver du temps à quelqu'un d'autre.

13
mimoralea

Super tard pour ça

J'ai essayé toutes ces autres réponses et ai couru beaucoup de versions différentes de mysql -u root -p mais jamais juste couru 


mysql -u root -p 

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


Une fois que j'ai fait ça ça a marché. J'espère que ça aide quelqu'un. 

12
garrettmac

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

J'ai également rencontré le même problème sur un serveur configuré par quelqu'un d'autre. Normalement, je ne choisis pas de créer un utilisateur anonyme lors de l'installation de MySQL, je ne l'avais donc pas remarqué. Au départ, je me suis connecté en tant qu'utilisateur "root" et j'ai créé un couple d'utilisateurs "normaux" (autrement dit, les utilisateurs disposant de privilèges uniquement sur dbs avec leur nom d'utilisateur comme préfixe), puis déconnectés, puis j'ai 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 utilisateur "Tout".

12
fevangelou

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

mon utilisateur est sonar et chaque fois que j'essaie de me connecter à ma base de données depuis une machine externe ou autre, j'obtiens une erreur en tant que 

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

Aussi, comme je suis en train d'essayer cela à partir d'une autre machine et grâce au travail de Jenkins, mon URL d'accès 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';
5
Abhijeet Kamble

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
3
Ali

Je voulais juste vous faire savoir une circonstance inhabituelle J'ai reçu la même erreur. Peut-être que cela aide quelqu'un dans le futur.

J'avais développé quelques vues de base, créées sur le site de développement et transférées vers le site de production. Plus tard dans la semaine, j’ai modifié un script PHP et toutes les erreurs soudaines sont apparues: Access a été refusé pour l’utilisateur 'local-web-user' @ 'localhost'. L'objet source de données n'ayant pas changé, je me suis donc concentré sur l'utilisateur de la base de données dans MySQL, en m'inquiétant que quelqu'un ait piraté mon site Web. Heureusement, le reste du site semblait indemne.

Plus tard, il s’est avéré que c’était le ou les coupables. Nos transferts d'objet sont effectués à l'aide d'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 la vue SECURITY par défaut est 

SQL SECURITY DEFINER

Lorsque l'utilisateur-web-local essaie d'utiliser la vue, il tombe sur les privilèges manquants du défineur pour utiliser les tables. Une fois la sécurité modifiée: 

SQL SECURITY INVOKER

le problème était résolu. Le problème réel était complètement différent de celui anticipé en fonction du message d'erreur.

3
Erik

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

accès implicite à 'facture' @ 'localhost' et NON à 'facture' @ '%'.

Il n'y a pas d'autorisation 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;
3
Gerd

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

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

Ou n'utilisez pas de mot de passe lors de la saisie. Laissez ce champ vide, puis tapez-le quand le terminal vous le demandera. C'est la manière 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>
3
Pranit More

J'ai eu un problème un peu similaire - lors de ma première tentative d'entrer dans MySQL, en tant que root, il m'a dit que l'accès était refusé. Il s'avère que j'ai oublié d'utiliser le Sudo ... 

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

Sudo mysql -u root -p 

puis entrez votre mot de passe, cela devrait fonctionner. 

2
David Refaeli

Résumé du débogage

  • Vérifiez l'erreur typo: nom d'utilisateur ou mot de passe. 
  • Vérifiez le nom de l'hôte et comparez-le avec la table mysql.user Nom de l'hôte. 
  • Vérifier que l'utilisateur existe ou non. 
  • Vérifiez si l'hôte contient une adresse IP ou un nom d'hôte.

Il est fort probable que vous ayez rencontré ce problème plusieurs fois dans votre travail. La plupart du temps, ce problème est dû à une mauvaise saisie du nom d'utilisateur ou du mot de passe. Bien que ce soit l'une des raisons, il y a beaucoup d'autres chances que vous rencontriez ce problème. Parfois, cela ressemble beaucoup, mais quand vous creuserez plus profondément, vous vous rendrez compte de multiples facteurs contribuant à cette erreur. Cet article explique en détail la plupart des raisons courantes et permet de résoudre ce problème. 

Raisons possibles:

  • Cas 1: Erreur typographique: nom d'utilisateur ou mot de passe.

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

Solution:  

La solution à ce type d'erreur est très simple. Il suffit d'entrer 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 façons 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 si vous oubliez votre mot de passe root.

  • Cas 2: Accéder à partir d'un hôte incorrect.

MySQL fournit des restrictions basées sur l'hôte pour l'accès des utilisateurs en tant que fonctions de sécurité. Dans notre environnement de production, nous avions l'habitude de limiter la demande d'accès 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 . Si elle n'est pas définie, vous pouvez mettre à jour ou insérer un nouvel enregistrement dans la table mysql.user . En règle générale, l'accès en tant qu'utilisateur racine à partir d'une machine distante est désactivé et ce n'est pas une pratique recommandée pour des raisons de sécurité . Si vous avez besoin d'accéder à votre serveur à partir de plusieurs machines, n'autorisez l'accès qu'à ces machines. Il vaut mieux ne pas utiliser de caractères génériques (%) et donner des accès universels . Permettez-moi de mettre à jour la table mysql.user, le démouser peut maintenant accéder au serveur MySQL à partir de n'importe quel hôte.

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

Ce type d'erreur se produit lorsque l'utilisateur auquel vous essayez d'accéder n'existe pas sur le serveur MySQL.

Solutions:

Lorsque vous êtes confronté à ce type de problème, il suffit de vérifier si l’utilisateur existe ou non dans la table mysql.user. Si l'enregistrement n'existe pas, l'utilisateur ne peut pas y accéder. Si cet utilisateur doit accéder, créez un nouvel utilisateur avec ce nom d'utilisateur.

  • Cas 4: Combinaison d'hôtes numériques et nominatifs.

Les points importants

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

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

  • Utiliser 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 très différent de cet article. Nous examinerons les sujets connexes suivants dans les prochains articles.

  • Que faire si vous avez oublié le mot de passe root dans le serveur MySQL.
  • Problèmes de privilège d'accès à MySQL et tables relatives aux utilisateurs.
  • Fonctionnalités de sécurité MySQL avec les meilleures pratiques.

J'espère que ce message vous aidera à corriger le code d'erreur MySQL 1045: accès refusé à l'utilisateur dans MySQL.

2
Abhijit Jagtap

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

Réglez-le sur, par exemple. mysql_native_password pour les réactiver:

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

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

Pour une raison quelconque (peut-être parce que mes mots de passe pré-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 'truc' @ '%' 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 éviter peut-être à quelqu'un d'utiliser la même quantité de temps ridicule que moi sur cette question.

2
maxelost

Je ne sais pas si quelqu'un d'autre trouvera cela utile, mais j'ai rencontré la même erreur et recherché partout des utilisateurs anonymes ... et il n'y en avait pas. Le problème a fini par être que le compte d'utilisateur était configuré sur "Requérir SSL" - ce que j'ai trouvé dans PHPMyAdmin en allant dans Comptes d'utilisateurs et en cliquant sur Modifier les privilèges de l'utilisateur. Dès que j'ai décoché cette option, tout a fonctionné comme prévu!

2
Alan

J'ai découvert encore un autre cas qui semble à la surface être un cas Edge; Je peux exporter vers le système de fichiers, via SELECT INTO .. ​​OUTFILE en tant que root, mais pas en tant qu'utilisateur ordinaire. Même s’il s’agit peut-être d’autorisations, j’y ai jeté un œil et je ne vois rien de particulièrement évident. Tout ce que je peux dire, c'est que l'exécution de la requête en tant qu'utilisateur standard disposant de toutes les autorisations sur la base de données en question renvoie l'erreur d'accès refusé qui m'a conduit à cette rubrique. Lorsque j'ai trouvé la transcription d'une utilisation réussie de SELECT INTO… OUTFILE dans un ancien projet, j'ai remarqué que j'étais connecté en tant que root. En effet, lorsque je me suis connecté en tant que root, la requête a été exécutée comme prévu.

2
David A. Gray

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

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

mysql -u debian-sys-maint -p

Dans un autre terminal, cat 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

2
ysk

Dans la fenêtre, Comment résoudre ERROR 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec 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
0
Sanjay

Cela peut s’appliquer à très peu de personnes, mais voici. N'utilisez pas d'exaclamation (!) Dans votre mot de passe. J'ai fait et obtenu l'erreur ci-dessus en utilisant MariaDB. Quand je l'ai simplifié à des chiffres et des lettres, cela a fonctionné. D'autres caractères tels que @ et $ fonctionnent bien - j'ai utilisé ces caractères dans un autre utilisateur sur la même instance. La cinquième réponse à cette adresse m'a conduit à mon correctif.

0
Chiwda

OS: fenêtres 

Mon message d'erreur est le suivant: "MySQL ERROR 1045 (28000): accès refusé pour l'utilisateur" root "@" localhost "(avec le mot de passe: YES)"

Ma raison n'est pas ouverte cmd avec administrator permission 

donc ma solution: ouvrir cmd avec administrator permission, alors cela fonctionne.

0
yilin

Lorsque vous exécutez mysql -u bill -p, localhost est résolu en votre adresse IP, puisqu'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 pourquoi il existe 2 enregistrements différents pour l'utilisateur root dans le résultat de la requête select Host, user from mysql.user;.

Il y a deux façons de gérer ce problème.

On spécifie une adresse IP qui n'est pas résolument inversée 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écutez la commande mysql -u bill -p -h 10.0.0.2, vous pourrez vous connecter. Si vous tapez select user();, vous obtiendrez [email protected]. Bien sûr, aucun nom de domaine ne doit être résolu avec cette adresse IP dans votre fichier /etc/hosts.

Deuxièmement, vous avez besoin d'accorder un accès pour ce nom de domaine spécifique. Pour bill@localhost, vous devez appeler la 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é, la commande select user(); renvoie bill@localhost.

Mais ce n'est que pour cela que vous essayez de vous connecter à un serveur mysql dans le même hôte. De la part des hôtes distants, mysql se comporte normalement, '%' vous autorisera à vous connecter.

0
Shnkc

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 l’a fait fonctionner. 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 est les guillemets doubles. Ils semblent être assez significatifs dans PHP par rapport à Java et ils ont un impact sur les caractères d'échappement, la configuration d'URL et la transmission de paramètres à une fonction. Ils sont plus jolis (je sais) mais utilisez toujours des guillemets simples autant que possible, les guillemets doubles peuvent être imbriqués dans ceux-ci si nécessaire. 

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

0
Raymond Wachaga

Cela peut également se produire si MySQL est exécuté sur un système d'exploitation * non sensible à la casse, tel que Windows.

par exemple. J'ai constaté que la tentative de connexion à la base de données à l'aide de ces informations d'identification a échoué:

mysql> grant select on databaseV105. * à 'specialuser' identifié par 's3curepa5wrd';

$ mysql -specialuser '-p's3curepa5wrd' -h10.61.130.89 databaseV105

ERROR 1045 (28000): Accès refusé pour l'utilisateur 'specialuser'@'10.0.1.113' (avec mot de passe: YES)

mais, cela a réussi:

mysql> grant select on databasev105. * to 'specialuser' identifié par 's3curepa5wrd';

$ mysql -specialuser '-h10.300.300.400 databaseV105 -p

Entrer le mot de passe:

0
kguest

J'ai résolu ce problème en supprimant les anciennes entrées 'facture' de l'utilisateur (c'est la partie importante: à la fois depuis mysql.user et mysql.db ), puis j'ai créé le même utilisateur aussi triste auparavant:

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, je vais en retirer quelques-uns :)

0
dxvargas