MySQL - ERREUR 1045 (28000): accès refusé à l'utilisateur

9

Je viens d'installer une nouvelle copie d'Ubuntu 10.04.2 LTS sur une nouvelle machine. Je me suis connecté à MySQL en tant que root:

david@server1:~$ mysql -u root -p123

J'ai créé un nouvel utilisateur appelé repl. J'ai laissé l'hôte vide, donc le nouvel utilisateur peut avoir accès à partir de n'importe quel endroit.

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

J'ai vérifié la table des utilisateurs pour vérifier que le nouvel utilisateur repl a été correctement créé.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Je quitte ensuite, j'essaye de me connecter en tant qu'utilisateur repl, mais l'accès est refusé.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

Pourquoi l'accès est-il refusé?

davidjhp
la source
J'ai juste essayé de supprimer l'utilisateur et de créer avec l'hôte localhost, et cela a fonctionné. CREATE USER 'repl' @ 'localhost' IDENTIFIED BY '123'; Mais je ne veux pas restreindre l'utilisateur à un hôte, je préférerais avoir n'importe quel hôte.
davidjhp

Réponses:

5

La raison pour laquelle vous ne pouvez pas vous connecter repl@'%'est liée au protocole d'authentification des utilisateurs de MySQL . Il ne couvre pas les schémas d'utilisateurs comme on pourrait le croire.

Regardez comment vous avez essayé de vous connecter

mysql -u repl -p123

Puisque vous n'avez pas spécifié d'adresse IP, mysql suppose que l'hôte est localhost et essaie de se connecter via le fichier socket. C'est pourquoi le message d'erreur indique Access denied for user 'repl'@'localhost' (using password: YES).

On pourrait penser repl@'%'permettrait repl@localhost. Selon la façon dont MySQL effectue l'authentification des utilisateurs , cela ne se produira tout simplement jamais. Est-ce que cela aiderait?

mysql -u repl -p123 -h127.0.0.1

Croyez-le ou non, mysql tenterait à repl@localhostnouveau. Pourquoi? Le client mysql voit 127.0.0.1et réessaye le fichier socket.

Essayez-le comme ceci:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Cela forcerait le client mysql à utiliser explicitement le protocole TCP / IP. Il n'aurait alors d'autre choix que de l'utilisateur repl@'%'.

RolandoMySQLDBA
la source
4

Vous devez émettre pour localhost qui lui est spécifique.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

Et essayez de vous connecter.

Mannoj
la source
1

Le problème est ces deux comptes, ajoutés par défaut.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Un nom d'utilisateur vide est un caractère générique, donc quel que soit le compte que vous utilisez, il correspond à cet utilisateur si MySQL pense que vous vous connectez depuis localhost ou le nom de votre serveur local (server1 dans ce cas) ... car ils n'ont pas de mot de passe, aucun le mot de passe que vous essayez est incorrect. L'authentification de l'utilisateur n'essaie que la première correspondance, de sorte que l'utilisateur que vous avez créé n'est jamais remarqué lorsque votre hôte est localhost (ou le nom de votre serveur).

Supprimez ces deux éléments du fichier mysql. usertable, puis FLUSH PRIVILEGES;.

Ou, le script mysql_secure_installation peut le faire pour vous, bien que j'ai tendance à préférer faire les choses manuellement.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Michael - sqlbot
la source
0

Assurez-vous que tous les champs du connecteur sont configurés avec les détails corrects

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"

Vérifiez également les erreurs majuscules et minuscules - 1045 n'est pas une erreur de syntaxe, mais a à voir avec des détails incorrects dans le connecteur

Johan Swan
la source
0

La base de données n'est peut-être pas encore configurée, il suffit d'émettre un appel sans argument:

mysql <enter>

Server version: xxx

Copyright (c) xxx

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

Mysql [(none)]> 

Si Mysql doit être défini comme mot de passe root, vous pouvez utiliser

mysql_secure_installation
TRicks43
la source
-2

Cela pourrait être un problème de corruption de votre base de données mysql. Les tables à l'intérieur de la base de données mysql comme la table utilisateur peuvent être corrompues et provoquer leur émission.

Veuillez vérifier ces

myisamchk / var / lib / mysql / mysql / * .MYI

Habituellement, lors de la vérification ou de la correction des tables myisam, nous aimerions d'abord supprimer mysql. Si ce problème n'est toujours pas résolu, essayez-le également.

S'ils sont corrompus, vous pouvez les corriger en utilisant

myisamchk --silent --force --fast /path/table-name.MYI

Merci,

Masood

Masood Alam
la source