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é?
Réponses:
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
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@'%'
permettraitrepl@localhost
. Selon la façon dont MySQL effectue l'authentification des utilisateurs , cela ne se produira tout simplement jamais. Est-ce que cela aiderait?Croyez-le ou non, mysql tenterait à
repl@localhost
nouveau. Pourquoi? Le client mysql voit127.0.0.1
et réessaye le fichier socket.Essayez-le comme ceci:
Cela forcerait le client mysql à utiliser explicitement le protocole TCP / IP. Il n'aurait alors d'autre choix que de l'utilisateur
repl@'%'
.la source
Vous devez émettre pour localhost qui lui est spécifique.
Et essayez de vous connecter.
la source
Le problème est ces deux comptes, ajoutés par défaut.
http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html
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
.user
table, puisFLUSH 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
la source
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
la source
La base de données n'est peut-être pas encore configurée, il suffit d'émettre un appel sans argument:
Si Mysql doit être défini comme mot de passe root, vous pouvez utiliser
la source
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
la source