Erreur MySQL 1045 (28000): Accès refusé pour l'utilisateur 'bill'@ 'localhost' (en utilisant le mot de passe: oui)

permettez-moi D'abord de mentionner que j'ai passé en revue de nombreuses questions suggérées et 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

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

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

accordé tous les privilèges à l'utilisateur facture:

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

puis je sors de l'utilisateur root et j'essaie pour se connecter avec bill:

mysql -u bill -p

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

erreur 1045 (28000): Accès refusé pour l'utilisateur 'bill' @ 'localhost' (en utilisant le mot de passe: oui)

335
demandé sur Beryllium 2012-04-24 17:42:50

30 réponses

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 qui de pour les utiliser. Elle règle cette question comme suit: (...)

  • Lorsqu'un client tente de se connecter, le serveur regarde à travers les lignes [de la table mysql.l'utilisateur] dans l'ordre de tri.
  • le serveur utilise la première ligne qui correspond au nom d'hôte client et au nom d'utilisateur.

(...) Le serveur utilise des règles de tri qui commandent les lignes avec les valeurs les plus spécifiques de L'hôte d'abord . Les noms d'hôtes littéraux [tels que" localhost"] et les adresses IP sont les plus spécifiques.

donc, un tel utilisateur anonyme "masquerait" n'importe quelle autre utilisateur comme '[any_username]'@'%' lors de la connexion à partir de localhost .

'bill'@'localhost' correspond à 'bill'@'%' , mais correspondent à (par exemple) ''@'localhost' beforehands.

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


les modifications ci-dessous ne sont pas pertinentes à la question principale. Il s'agit uniquement de répondre à certaines questions soulevées dans autres commentaires dans ce fil.

Edition 1

authentifiant comme 'bill'@'%' à travers une socket.


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    Welcome to the MySQL monitor (...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    4 rows in set (0.00 sec)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | bill@%         |
    +----------------+----------------+
    1 row in set (0.02 sec)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 row in set (0.00 sec)

Edit 2

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


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Welcome to the MySQL monitor (...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    Query OK, 0 rows affected (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): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Modifier 3

même situation que dans edit 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
    Welcome to the MySQL monitor (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Conclusion 1, de edit 1: on peut s'authentifier comme 'bill'@'%' à travers une socket.

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

Conclusion 3, de modifier 3: Bien que j'ai précisé -ubill , j'ai accès en tant qu'utilisateur anonyme. Cela est dû aux" règles de tri " indiquées ci-dessus. Notez que dans la plupart des installations par défaut, un mot de passe sans, utilisateur anonyme existe (et doit être sécurisé/supprimé).

376
répondu RandomSeed 2016-08-26 14:26:29

, Essayez:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
120
répondu Edgar Aviles 2012-10-25 20:39:16

quand vous avez couru

mysql -u bill -p

et a obtenu 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 voulez vous connecter à distance, vous devez spécifier soit le nom DNS, L'IP publique, ou 127.0.0.1 en utilisant TCP/ IP:

mysql -u bill -p -hmydb@mydomain.com
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

une fois que vous vous connectez, veuillez exécuter ce

SELECT USER(),CURRENT_USER();

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

CURRENT_USER () rapporte comment vous avez été autorisé à vous authentifier dans MySQL à partir du mysql.utilisateur table

cela vous donnera une meilleure vue de comment et pourquoi vous avez été autorisé à vous connecter à mysql. Pourquoi est-ce important de connaître ce point de vue? Il s'agit du 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 watch 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>

L'ordre D'authentification est très strict. 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 de demander explicitement TCP comme protocole pour le client mysql si nécessaire.

60
répondu RolandoMySQLDBA 2017-04-13 12:42:36

quand vous tapez mysql -u root -p , vous vous connectez au serveur mysql via une socket unix locale.

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

Si vous souhaitez accorder l'accès à la socket unix, vous devez accorder des privilèges à la 'loi'@'localhost' , 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 le client de ligne de commande mysql, comme pour correspondre aux privilèges que vous avez déjà accordés, par exemple lancer mysql -u root -p -h 192.168.1.123 ou n'importe quelle adresse IP locale de votre boîte.

14
répondu nos 2012-06-26 17:39:13

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

1 :arrêtez votre mysql

[root@maomao ~]# service mysqld stop

Arrêter 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 des bases de données dans /var/lib/mysql

3: Ouvrir une nouvelle fenêtre et entrer mysql-u root

[root@cy400 ~]# mysql-u root

Bienvenue sur le moniteur MySQL. Les commandes se terminent par ; ou \G.

4: modifier la base de données des utilisateurs

mysql> use mysql
151990920" Renseignements sur la lecture des tableaux pour compléter les noms des tableaux et des colonnes Vous pouvez désactiver cette fonction pour obtenir la plus rapide de démarrage-Un Base de données changée

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

mysql> update user set password=password ('root123') where user= 'root';

Interrogation OK, 3 lignes affectées (0.00 sec)

Lignes appariées: 3 changé: 3 Avertissements: 0

6: flush

mysql> flush privileges;

7: quit

mysql> quit

Au revoir

8: redémarrer mysql

[root@cy400 ~] # service mysqld restart;

Arrêter MySQL: [OK ]

Starting MySQL: [OK ]

bingo-test 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
répondu Li Yingjun 2018-01-21 00:34:14

un problème connexe dans mon cas était d'essayer de se connecter en utilisant:

mysql -u mike -p mypass

Espaces EST apparemment autorisé entre l'-u #uname# mais PAS entre-p et #password#

donc nécessaire:

mysql -u mike -pmypass

autrement avec l'espace blanc Entre -p mypass mysql prend "mypass" comme le db nom

13
répondu mstram 2014-08-20 18:19:28

épargnez-vous un gros mal de tête... Votre problème pourrait être que vous manquez les guillemets autour du mot de passe. Au moins c'était mon cas, déviée moi 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

Rechercher "Ici est typique d'un utilisateur de l'option de fichier:" et voir l'exemple de l'état. Bonne chance, et j'espère pour sauver quelqu'un d'autre peu de temps.

12
répondu mimoralea 2014-10-22 19:28:26

la solution est de supprimer l'utilisateur anonyme (tout)!

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, donc je n'avais pas remarqué cela. Au départ, je me suis connecté en tant qu'utilisateur" root "et j'ai créé quelques utilisateurs" normaux " (utilisateurs aka avec des privilèges uniquement sur dbs avec leur nom d'utilisateur comme préfixe), puis je me suis déconnecté, puis j'ai vérifié le premier utilisateur normal. Je ne pouvais pas entrer dans le système. Ni via phpMyAdmin, ni via le shell. Il s'avère que le coupable est "N'importe quel" utilisateur.

12
répondu fevangelou 2015-11-07 20:00:47

Super-fin à cette

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


mysql -u root -p

et juste en appuyant sur [ENTER] pour le mot de passe.


une fois que j'ai fait que ça a fonctionné. Espérons que cela aide quelqu'un.

11
répondu garrettmac 2016-10-03 23:46:03

la meilleure solution que j'ai trouvée pour moi-même 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, je reçois une erreur comme

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

aussi comme je suis en train d'essayer ceci d'une autre machine et à travers Jenkins job mon URL pour accéder est

alm-lt-test.xyz.com

si vous voulez vous connecter à distance, vous pouvez le spécifier de différentes façons 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 accéder à ceci avec L'URL vous avez juste à 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
répondu Abhijeet Kamble 2014-09-18 14:33:59

d'Accord, je ne suis pas sûr, mais c'est probablement mon.le fichier cnf dans le répertoire d'installation mysql est le coupable. Commenter cette ligne et le problème pourrait être résolu.

bind-address = 127.0.0.1
3
répondu Ali 2012-04-25 09:37:17

c'est une différence entre:

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

et

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

Check it:

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 à 'bill' @ ' localhost 'et non à'bill'@'%'.

il n'y a pas de 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;
3
répondu Gerd 2015-12-01 17:32:03

cela se produit aussi lorsque votre mot de passe contient des caractères spéciaux comme @,$,etc. Pour éviter cette situation, vous pouvez envelopper le mot de passe dans des guillemets simples:

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

ou n'utilisez pas de mot de passe en entrant. Laissez-le vide et tapez-le quand le terminal 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>
3
répondu Pranit More 2016-07-08 06:44:42

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 sur le site de production. Plus tard dans la semaine j'ai changé un script PHP et toutes les erreurs soudaines sont apparues que L'accès a été refusé pour l'utilisateur 'local-Web-user'@'localhost'. L'objet datasource n'avait pas changé, donc je me suis concentré sur L'utilisateur de la base de données dans MySQL, le plus inquiétant dans l'intervalle, quelqu'un a piraté mon site web. Heureusement, le reste du site semblait indemne.

il s'est avéré plus tard que les vues étaient le(s) coupable (s). Nos transferts d'objets se font en utilisant un autre utilisateur (et distant: admin@ip-address) que l'utilisateur du site Web local. Ainsi, les vues ont été créées avec 'admin'@'ip-address' comme definer. La valeur par défaut de la sécurité de la création de la vue est

SQL SECURITY DEFINER

quand un internaute local essaie d'utiliser la vue sur laquelle il tombe le manque de privilèges de la définisseur d'utiliser les tableaux. Une fois la sécurité changée en:

SQL SECURITY INVOKER

la question est résolue. Le problème réel était complètement différent de ce qui était prévu en fonction du message d'erreur.

2
répondu Erik 2015-10-06 13:28:21

pas sûr que quelqu'un d'autre trouvera cela utile, mais j'ai rencontré la même erreur et j'ai cherché partout des utilisateurs anonymes...et il n'y avait pas tout. Le problème a fini par être que le compte d'Utilisateur a été défini à "Require SSL" - que J'ai trouvé dans PHPMyAdmin en allant dans les comptes D'Utilisateur et en cliquant sur Modifier les privilèges pour l'utilisateur. Dès que j'ai décoché cette option, tout a fonctionné comme prévu!

2
répondu Alan 2016-03-10 02:53:27

pour moi, ce problème a été causé par une nouvelle caractéristique de MySQL 5.7.2: user les entrées sont ignorées si leur champ plugin est vide.

régler à e.g. mysql_native_password pour les rendre disponibles:

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

Voir les notes de version de MySQL 5.7.2 , en vertu de l'Authentification "Notes".

pour une raison quelconque (peut-être parce que mes hachages de mot de passe pre-4.1 ont été supprimés), le Le script mysql_upgrade n'a pas défini de valeur par défaut pour le plugin.

j'ai remarqué le message d'avertissement suivant dans /var/log/mysql/error.log :

[Warning] L'entrée utilisateur 'foo'@'%' a une valeur de plugin vide. L'utilisateur sera ignoré et personne ne peut se connecter avec cet utilisateur plus.

je poste cette réponse ici pour peut-être sauver quelqu'un d'utiliser la même quantité ridicule de temps sur ce que j'ai fait.

2
répondu maxelost 2016-09-18 23:43:10

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

ayez votre démon mysql fonctionnant 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 lorsqu'on vous le demande.

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

2
répondu ysk 2018-01-21 01:05:28

j'ai eu un problème quelque peu similaire - lors de ma première tentative D'entrer dans MySql, en tant que root, il m'a dit Accès 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 entrer votre mot de passe, cela devrait fonctionner.

2
répondu David Refaeli 2018-08-04 11:00:09

Débogage "Résumé De La 151920920"

  • Vérifiez s'il y a une erreur typographique: nom d'utilisateur ou mot de passe.
  • vérifiez le nom de l'hôte et comparez-le avec mysql.table utilisateur nom d'hôte.
  • Vérifier existe ou pas.
  • vérifiez si host contient L'adresse IP ou le nom d'hôte.

il y a de grandes chances que vous ayez rencontré ce problème plusieurs fois dans votre travail. Ce problème m'est arrivé 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 nombreuses chances que vous pourriez obtenir ce problème. Parfois, il semble très similaire, mais quand vous creusez plus profondément, vous vous rendrez compte de multiples facteurs contribuant à cette erreur. Ce post expliquera en détail, la plupart des raisons communes et de travailler autour pour résoudre ce problème.

Possible motifs:

  • Case 1: erreur typographique: nom d'utilisateur ou mot de passe.

C'est la raison la plus fréquente 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 pour ce type d'erreur est très simple. Il suffit d'entrer le corriger le nom d'utilisateur et le mot de passe. Cette erreur sera résolu. 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 pour le compte administrateur / root, il y a plusieurs façons de réinitialiser / recapturer le mot de passe root. Je vais publier un autre post sur la façon de réinitialiser le mot de passe root dans le cas où vous oubliez le mot de passe root.

  • cas 2: accès depuis un mauvais hôte.

MySQL fournit une restriction basée sur l'hôte pour l'accès utilisateur comme une caractéristique de sécurité. Dans notre environnement de production, nous avions l'habitude de restreindre la demande d'accès uniquement aux serveurs D'Application. Cette fonctionnalité est très utile dans de nombreux scénarios de production.

Solution:

lorsque vous faites face à ce type de problème, vérifiez d'abord si votre hôte est autorisé ou non en vérifiant le mysql.table utilisateur. Si c' n'est pas défini, vous pouvez mettre à jour ou insérer un nouvel enregistrement à mysql.table utilisateur. En général, l'accès 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 des exigences pour accéder à votre serveur à partir de plusieurs machines, donner accès seulement à ces machines. Il est préférable de ne pas utiliser de caractères génériques (%) et donne des accès universels. Laissez-moi mettre à jour le mysql.table d'utilisateur, maintenant le demouser peut 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 tentez d'accéder n'existe pas sur le serveur MySQL.

Solutions:

lorsque vous faites face à ce type de problème, il suffit de vérifier si l'utilisateur existe dans mysql.table d'utilisateurs ou pas. Si l'enregistrement n'existe pas, l'utilisateur ne peut pas accéder. Si il y a un obligation pour l'utilisateur d'accéder, de créer un nouvel utilisateur avec ce nom d'utilisateur.

  • Case 4: mélange d'hôtes numériques et basés sur le nom.

points importants

  • il n'est pas conseillé d'utiliser des caractères génériques pour définir user host, essayez d'utiliser le nom exact de l'hôte.

  • désactiver root login à distance de la machine.

  • Utiliser le proxy de l'utilisateur du concept.

il y a peu d'autres concepts liés à ce sujet et entrer dans les détails de ces sujets est la portée très différente de cet article. Nous examinerons les sujets connexes suivants dans les prochains articles.

  • Que faire si vous avez oublié le mot de passe root du serveur MySQL.
  • Accès MySQL privilèges d'utilisateur et de tables liées.
  • MySQL fonctions de sécurité avec les meilleures pratiques.

j'espère que ce post aidera pour vous de fixer la base de Code d'Erreur 1045 Accès refusé pour l'utilisateur dans MySQL.

1
répondu Abhijit Jagtap 2017-11-14 07:32:36

j'ai résolu cela en supprimant les anciennes entrées 'bill' de buggy user (c'est la partie importante: tous les deux de mysql.utilisateur et mysql.db ), puis créé le même utilisateur que dau avant:

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

fonctionne, l'utilisateur se connecte. Maintenant je vais en retirer quelques prévilegies:)

0
répondu dxvargas 2014-05-03 04:06:44

sur la fenêtre, comment résoudre L'erreur 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: non)

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
répondu Sanjay Patel 2018-03-04 08:55:27

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. Notez 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 doubles guillemets. Ils semblent être assez significatifs en PHP par rapport à Java et ils ont un impact quand il s'agit d'échapper des caractères, de configurer des URLs et maintenant, de passer des paramètres à une fonction. Ils sont plus jolis (je sais) mais utilisez toujours des guillemets simples, autant que possible, puis double-guillemets peuvent être imbriqués dans ceux si nécessaire.

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

0
répondu Raymond Wachaga 2018-08-11 00:17:41

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 l'hôte local vous pouvez également utiliser les caractères génériques " % " et " _ " dans le nom d'hôte ou les valeurs D'adresse IP. Celles-ci ont la même signification que pour les opérations d'appariement de motifs effectuées avec un opérateur similaire. Par exemple, une valeur de l'hôte de '%' correspond à un nom d'hôte, tandis qu'une valeur '%.mysql.com correspond à n'importe quel hôte dans le mysql.com domaine. "192.168.1.%' correspond à n'importe quel hôte dans le 192.168.1 réseau de classe C.

ci-dessus était juste introduction:

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

pour plus d'information, voir http://dev.mysql.com/doc/refman//5.5/en/account-names.html

-1
répondu Mahesh Patil 2012-06-27 14:15:43

lorsque vous lancez mysql -u bill -p , localhost est résolu à votre ip, car il est 127.0.0.1 et dans votre fichier /etc/hosts , comme par défaut 127.0.0.1 localhost existe. Ainsi, mysql vous interprète comme bill@localhost ce qui n'est pas accordé avec bill@'%' . C'est pourquoi il existe 2 enregistrements différents pour l'utilisateur root suite à la requête select host, user from mysql.user; .

il y a deux façons de traiter cette question.

on spécifie une ip qui n'est pas inversée résolu par /etc/hosts fichier lorsque vous essayez de vous connecter. Par exemple, l'ip du serveur est 10.0.0.2 . Lorsque vous lancerez la commande mysql -u bill -p -h 10.0.0.2 , vous pourrez vous connecter. Si vous tapez select user(); , vous obtiendrez bill@10.0.0.2 . Bien sûr, aucun nom de domaine ne doit être résolu à cette adresse ip dans votre fichier /etc/hosts .

Deuxièmement, vous devez accorder l'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 serez en mesure pour se connecter avec la commande mysql -u bill -p . Une fois connecté, la commande select user(); retourne bill@localhost .

, Mais c'est seulement pour que vous essayez de vous connecter à un serveur mysql dans le même hôte. Depuis les hôtes distants, mysql se comporte de manière inattendue, '%' vous permettra de vous connecter.

-1
répondu Shnkc 2014-02-03 08:00:37

assurez-vous qu'il n'y a pas d'autres instances SQL en cours d'exécution qui utilisent le poteau localhost. Dans notre cas, une autre instance était en cours d'exécution sur le localhost qui entrait en conflit avec le login. De l'éteindre de résoudre ce problème.

-1
répondu eriwin 2014-02-11 14:18:31

aussi le problème peut se produire si vous utilisez L'ancienne version de L'interface utilisateur MySQL (comme SQLYoug) qui génère des mots de passe avec un mauvais hachage.

la création d'utilisateur avec le script SQL corrigera le problème.

-1
répondu Stanislav 2014-05-05 15:49:46

j'ai eu le même problème, mais dans mon cas la solution a été résolue par le commentaire d'eggyal. J'avais aussi un utilisateur anonyme, mais le supprimer n'a pas résolu le problème. La commande' FLUSH PRIVILEGES'a fonctionné.

la chose surprenante pour moi à ce sujet était que j'ai créé l'utilisateur avec MySQL Workbench et je m'attendais à ce que pour effectuer toutes les fonctions nécessaires pour compléter la tâche.

-1
répondu jgibbs 2014-08-29 11:56:00

le signe pour cent signifie Tout ip so localhost est superflu ... Il n'y a pas besoin du deuxième disque avec le localhost .

en fait il y a,' localhost ' est spécial dans mysql, cela signifie une connexion sur une socket unix (ou des pipes nommées sur windows je crois) par opposition à une socket TCP/IP. utiliser % comme hôte n'inclut pas' localhost '

Les comptes D'utilisateurs MySQL

ont deux composants: un nom d'utilisateur et un nom d'hôte. Le nom d'utilisateur identifie l'utilisateur, et le nom de l'hôte spécifie les hôtes à partir desquels l'utilisateur peut se connecter. Le nom d'utilisateur et le nom d'hôte sont combinés pour créer un compte d'utilisateur:

'<user_name>'@'<host_name>' Vous pouvez spécifier une adresse IP spécifique ou une plage d'adresses pour le nom de l'hôte, ou utiliser le caractère pourcentage ("%") pour permettre à cet utilisateur de se connecter à partir de n'importe quel hôte.

Note que les comptes d'utilisateurs sont définis par le nom d'utilisateur et le nom d'hôte. Par exemple, 'root'@'%' est un compte d'utilisateur différent que 'root'@'localhost' .

-1
répondu Nitin 2016-08-26 17:08:31

j'ai eu le même problème que L'OP tout en essayant d'accéder à un conteneur MYSQL docker construit avec une composition qui avait un très long mot de passe:

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

la réduction de la longueur du mot de passe et la reconstruction via compose m'ont permis d'accéder au conteneur MYSQL avec un client comme Workbench.

-1
répondu Daryl Wright 2018-01-20 18:20:24

pour les utilisateurs Mac s'ils ont encore le problème( comme c'était mon cas), j'ai trouvé que cette solution a fonctionné pour moi: ligne de commande MySQL '- commande bash non trouvée'

pour utiliser la commande mysql sur macbook terminal vous devez exporter le chemin en utilisant:

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

compte tenu de l'installation par défaut, utilisez la commande suivante pour obtenir l'invite mysql en tant qu'utilisateur root:

mysql -u root

sinon vous utilisez mauvais mot de passe root.

Ref: Paramétrage du mot de passe utilisateur MySQL root sur OSX

-1
répondu mOna 2018-01-21 00:37:27