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 MySQL root avec cette commande:
mysql -u root -p
J'ai ensuite 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 j'essaye de me connecter avec bill:
mysql -u bill -p
entré le bon mot de passe et obtenu cette erreur:
ERREUR 1045 (28000): accès refusé pour l'utilisateur 'facture' @ 'localhost' (en utilisant le mot de passe: OUI)
FLUSH PRIVILEGES
?Réponses:
Vous avez probablement un utilisateur anonyme
''@'localhost'
ou''@'127.0.0.1'
.Selon le manuel :
Par conséquent, un tel utilisateur anonyme "masquerait" tout autre utilisateur comme
'[any_username]'@'%'
lors de la connexionlocalhost
.'bill'@'localhost'
correspond'bill'@'%'
, mais correspondrait (par exemple)''@'localhost'
au préalable.La solution recommandée est de 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. Ceux-ci sont uniquement destinés à répondre à certaines questions soulevées dans d'autres commentaires de ce fil.
Modifier 1
Authentification comme
'bill'@'%'
via une prise.Modifier 2
Exactement la même configuration, sauf que j'ai réactivé la mise en réseau et que je crée maintenant un utilisateur anonyme
''@'localhost'
.Modifier 3
Même situation que dans l'édition 2, fournissant maintenant le mot de passe de l'utilisateur anonyme.
Conclusion 1, de l'édition 1: On peut s'authentifier comme
'bill'@'%'
via une socket.Conclusion 2, de l'édition 2: Que l'on se connecte via TCP ou via un socket n'a aucun impact sur le processus d'authentification (sauf que l'on ne peut pas se connecter comme n'importe qui d'autre mais
'something'@'localhost'
via un socket, évidemment).Conclusion 3, de l'édition 3: Bien que je l'ai spécifié
-ubill
, j'ai obtenu l'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 utilisateur anonyme sans mot de passe existe (et doit être sécurisé / supprimé).la source
DROP USER ''@'localhost';
. Ils ne sont pas nécessaires à un usage particulier.Essayer:
la source
Quand tu as couru
et a obtenu cette erreur
mysqld attend que vous vous connectiez en tant que
bill@localhost
Essayez de créer
bill@localhost
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:
Une fois connecté, veuillez exécuter ceci
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 vue de comment et pourquoi vous avez été autorisé à vous connecter à mysql. Pourquoi est-il important de connaître ce point de vue? Cela a à voir avec le protocole de commande de l'authentification des utilisateurs.
Voici un exemple: je vais créer un utilisateur anonyme sur mon bureau MySQL
OK, regardez-moi me connecter en tant qu'utilisateur anonyme:
La commande d'authentification est très stricte. Il vérifie du plus spécifique au moins. J'ai écrit sur ce style d'authentification dans le DBA StackExchange .
N'oubliez pas d'appeler explicitement TCP comme protocole pour le client mysql lorsque cela est nécessaire.
la source
'bill'@'localhost'
devrait correspondre'bill@%'
, non?SELECT USER(),CURRENT_USER();
. Vous ne voyez presque jamais d'utilisateurs anonymes apparaître à partir de ces deux fonctions, sauf dans des configurations vraiment médiocres.mysql.user
. En fait, si vous relisez ma réponse, vous verrez que j'ai dit (en fait, le manuel dit) que l'ordre de tri est basé sur lahost
colonne en premier. Vous avez beaucoup écrit sur la façon de vérifier vos informations d'identification actuelles, mais je vois peu d'informations sur la raison pour laquelle'bill'@'localhost'
vous ne pouvez pas vous connecter en tant que'bill'@'%'
, c'est la question d'aujourd'hui AFAIK. L'OP a probablement une mauvaise configuration, c'est pourquoi il obtient ces erreurs.--protocol=TCP
était la clé. Merci beaucoup!Super tard pour ça
J'ai essayé toutes ces réponses et a couru de nombreuses versions différentes de
mysql -u root -p
mais jamais seulement RANmysql -u root -p
Et en appuyant simplement sur
[ENTER]
le mot de passe.Une fois que j'ai fait ça, ça a marché. J'espère que cela aide quelqu'un.
la source
Un problème connexe dans mon cas essayait de se connecter en utilisant:
L'espace est apparemment autorisé entre -u # uname # mais PAS entre -p et # password #
Il fallait donc:
Sinon, avec un espace blanc entre -p mypass mysql prend 'mypass' comme nom de base de données
la source
Lorsque vous tapez
mysql -u root -p
, vous vous connectez au serveur mysql via une socket Unix locale.Cependant, la subvention que vous avez accordée
'bill'@'%'
ne correspond que curieusement aux connexions TCP / IP.Si vous voulez accorder l'accès à la socket Unix locale, vous devez accorder des privilèges à 'bill' @ 'localhost', ce qui n'est curieusement 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 faire correspondre les privilèges que vous avez déjà accordés, par exemple exécuter
mysql -u root -p -h 192.168.1.123
ou quelle que soit l'adresse IP locale de votre box.la source
skip-networking
'bill'@'%'
via une socket sur une v5.5.Si vous oubliez votre mot de passe ou si vous souhaitez modifier votre mot de passe, vous pouvez suivre ces étapes:
Bingo! Vous pouvez connecter votre base de données avec votre nom d'utilisateur et votre nouveau mot de passe:
la source
mysql.server stop
. Dans mon cas, je n'ai pas pu mettre à jour la colonne utilisateur car il n'y en a pas; n'a pas non plus pu en créer un car il est en mode sans échec. Pour ce que je fais en ce moment, je m'en fiche, mais j'apprécie vraiment cette réponse au format avec les entrées et sorties exactes affichées. Merci!Sauvez-vous d'un mal de tête MAJEUR ... Votre problème pourrait être que vous manquez les guillemets autour du mot de passe. C'est du moins mon cas qui m'a détourné pendant 3 heures.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Recherchez «Voici un fichier d'options utilisateur type:» et voyez l'exemple qu'ils contiennent. Bonne chance et j'espère faire gagner du temps à quelqu'un d'autre.
la source
La solution est de supprimer l'utilisateur anonyme (Any)!
J'ai également rencontré le même problème lors de la configuration d'un 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épart, je me suis connecté en tant qu'utilisateur "root" et j'ai créé quelques utilisateurs "normaux" (c'est-à-dire des utilisateurs 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 n'ai pas pu me connecter. Ni via phpMyAdmin, ni via shell. Il s'avère que le coupable est cet utilisateur "Any".
la source
J'ai eu un problème quelque peu similaire - lors de ma première tentative d'entrer dans MySQL, car
root
il m'a dit que l'accès était refusé. Il s'avère que j'ai oublié d'utiliser lesudo
...Donc, si vous échouez à la
root
première tentative, essayez:puis entrez votre mot de passe, cela devrait fonctionner.
la source
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 comme
Aussi, comme j'essaie ceci à partir d'une autre machine et via le travail Jenkins, mon URL d'accès est
si vous souhaitez vous connecter à distance, vous pouvez le spécifier de différentes manières comme suit:
Pour y accéder avec l'URL, il vous suffit d'exécuter la requête suivante.
la source
D'accord, 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. Mettez cette ligne en commentaire et le problème pourrait être résolu.
la source
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 cette semaine-là, j'ai changé un script PHP et soudainement, des erreurs se sont produites: l'accès a été refusé à l'utilisateur «local-web-user» @ «localhost». L'objet source de données n'avait pas changé, alors je me suis concentré sur l'utilisateur de la base de données dans MySQL, inquiet en attendant que quelqu'un pirate mon site Web. Heureusement, le reste du site semblait indemne.
Il s'est avéré plus tard que les vues étaient les coupables. Nos transferts d'objets 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 valeur par défaut de création de la vue SECURITY est
Lorsque l'utilisateur local-web essaie d'utiliser la vue, il tombe sur les privilèges manquants du définisseur pour utiliser les tables. Une fois la sécurité modifiée:
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.
la source
C'est une différence entre:
et
Vérifie ça:
La commande
accès implicite à 'bill' @ 'localhost' et NON à 'bill' @ '%'.
Il n'y a aucune autorisation pour 'bill' @ 'localhost'
vous obtenez l'erreur:
résoudre le problème:
la source
Cela se produit également lorsque votre mot de passe contient des caractères spéciaux tels que @, $, etc. Pour éviter cette situation, vous pouvez mettre le mot de passe entre guillemets simples:
Ou à la place, n'utilisez pas de mot de passe lors de la saisie. Laissez-le vide, puis saisissez-le lorsque le terminal le demande. C'est la voie recommandée.
la source
pwgen
. Aujourd'hui, j'en ai généré une nouvelle pour une base de données MySQL et son utilisateur. Malheureusement, le mot de passe contenait une barre oblique inverse "\" que je n'ai pas identifiée comme l'origine des erreurs (je n'y ai même pas pensé). J'ai donc cherché pendant des heures une solution. Après avoir défini le mot de passe sur "123" en désespoir de cause, la connexion a finalement fonctionné. … Les utilisateurs doivent être conscients que certains caractères spéciaux peuvent causer des problèmes car MySQL n'affiche aucun avertissement sur l'utilisation de mots de passe tels que "daiy4ha4in7chooshuiphie \ Th * aew", par exemple.Pour moi, ce problème est dû à une nouvelle fonctionnalité de MySQL 5.7.2: les
user
entrées sont ignorées si leurplugin
champ est vide.Réglez-le par exemple
mysql_native_password
pour les réactiver:Voir les notes de publication de MySQL 5.7.2 , sous «Notes d'authentification».
Pour une raison quelconque (peut-être parce que mes hachages de mot de passe antérieurs à 4.1 ont été supprimés), le
mysql_upgrade
script n'a pas défini de valeur de plugin par défaut.J'ai découvert en remarquant le message d'avertissement suivant dans
/var/log/mysql/error.log
:Je poste cette réponse ici pour peut-être éviter à quelqu'un d'utiliser le même temps ridicule que moi.
la source
Je ne sais pas si 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 en avait pas. Le problème a fini par être que le compte d'utilisateur a été défini sur "Exiger SSL" - que j'ai trouvé dans PHPMyAdmin en accédant aux 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!
la source
Résumé du débogage
Il est fort probable que vous ayez rencontré ce problème plusieurs fois dans votre travail. Ce problème m'est apparu 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 existe de nombreuses autres chances que vous puissiez rencontrer ce problème. Parfois, cela semble très similaire, mais lorsque vous creuserez plus profondément, vous réaliserez plusieurs facteurs contribuant à cette erreur. Ce message expliquera en détail la plupart des raisons courantes et contournera ce problème.
Raisons possibles:
Il s'agit de la raison la plus courante de cette erreur. Si vous avez mal saisi 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. 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 administrateur / root, il existe de nombreuses 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 au cas où vous oublieriez le mot de passe root.
MySQL fournit une restriction basée sur l'hôte pour l'accès des utilisateurs en tant que fonctionnalités de sécurité. Dans notre environnement de production, nous avions l'habitude de restreindre la demande d'accès uniquement 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 vérifiant 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. Généralement, l'accès en tant qu'utilisateur root à partir d'une machine distante est désactivé et ce n'est pas une meilleure pratique, en raison de problèmes de sécurité. Si vous avez besoin d'accéder à votre serveur à partir de plusieurs machines, ne donnez accès qu'à ces machines. Il est préférable de ne pas utiliser de caractères génériques (%) et donne des accès universels. Permettez-moi de mettre à jour la table mysql.user, maintenant le démouseur peut accéder au serveur MySQL depuis n'importe quel hôte.
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 rencontrez ce type de problème, vérifiez simplement si l'utilisateur existe ou non dans la table mysql.user. Si l'enregistrement n'existe pas, l'utilisateur ne peut pas accéder. S'il est nécessaire que cet utilisateur accède, créez un nouvel utilisateur avec ce nom d'utilisateur.
Les points importants
Il n'est pas 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ésactivez la connexion root depuis la machine distante.
Utilisez le concept d'utilisateur proxy.
Il existe peu d'autres concepts liés à ce sujet et entrer dans les détails de ces sujets est une portée très différente de cet article. Nous examinerons les sujets connexes suivants dans les prochains articles.
J'espère que ce message vous aidera à corriger le code d'erreur MySQL 1045 Accès refusé pour l'utilisateur dans MySQL.
la source
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
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
la source
J'ai découvert un autre cas qui apparaît en surface comme un cas de bord; Je peux exporter vers le système de fichiers, via SELECT INTO .. OUTFILE en tant que root, mais pas en tant qu'utilisateur régulier. Bien que cela puisse être une question d'autorisations, j'ai examiné cela 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 régulier disposant de toutes les autorisations sur la base de données en question renvoie l'erreur d'accès refusé qui m'a conduit à ce sujet. 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. Effectivement, lorsque je me suis connecté en tant que root, la requête s'est exécutée comme prévu.
la source
Mise à jour: sur v8.0.15 (peut-être cette version),
PASSWORD()
fonction ne fonctionne pas.Vous devez:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
la source
Lorsque vous exécutez
mysql -u bill -p
,localhost
est résolu sur votre IP, car il est 127.0.0.1 et dans votre/etc/hosts
fichier, par défaut127.0.0.1 localhost
existe. Donc, mysql vous interprète commebill@localhost
ce qui n'est pas accordé avecbill@'%'
. C'est pourquoi il y a 2 enregistrements différents pour l'root
utilisateur à la suite deselect host, user from mysql.user;
requête.Il existe deux façons de gérer ce problème.
L'une spécifie une adresse IP qui n'est pas résolue inversement par
/etc/hosts
fichier lorsque vous essayez de vous connecter. Par exemple, l'ip du serveur est10.0.0.2
. Lorsque vous exécutez la commandemysql -u bill -p -h 10.0.0.2
, vous pourrez vous connecter. Si vous tapezselect user();
, vous obtiendrez[email protected]
. Bien sûr, aucun nom de domaine ne doit être résolu avec cette adresse IP dans votre/etc/hosts
fichier.Deuxièmement, vous devez accorder un accès pour ce nom de domaine spécifique. Pour
bill@localhost
, vous devez appeler la commandegrant all privileges on *.* to bill@localhost identified by 'billpass';
. Dans ce cas, vous pourrez vous connecter avec la commandemysql -u bill -p
. Une fois connecté, laselect user();
commande revientbill@localhost
.Mais c'est uniquement pour cela que vous essayez de vous connecter à un serveur mysql dans le même hôte. Sur les hôtes distants, mysql se comporte normalement, '%' vous autorisera à vous connecter.
la source
J'ai résolu cela en supprimant les anciennes entrées de «facture» de l'utilisateur buggé (c'est la partie importante: à la fois de mysql.user et mysql.db ), puis j'ai créé le même utilisateur que triste auparavant:
A travaillé, l'utilisateur se connecte. Maintenant, je vais en retirer certains privilèges :)
la source
J'ai rencontré la même erreur. La configuration qui ne fonctionnait pas est la suivante:
La configuration modifiée ci-dessous est celle qui l'a fait fonctionner. Remarquez la différence?
La différence réside dans les guillemets doubles. Ils semblent être assez importants en PHP par rapport à Java et ils ont un impact sur l'échappement des caractères, la configuration des URL et maintenant la transmission des paramètres à une fonction. Ils sont plus jolis (je sais), mais utilisez toujours des guillemets simples autant que possible, puis des guillemets doubles peuvent être imbriqués dans ceux-ci si nécessaire.
Cette erreur est survenue lorsque j'ai testé mon application sur une boîte Linux par opposition à un environnement Windows.
la source
J'ai rencontré des problèmes similaires car mon mot de passe contient ";" char casser mon mot de passe quand je le crée au premier moment. Attention à cela si cela peut vous aider.
la source
Cela peut s'appliquer à très peu de gens, mais voilà. N'utilisez pas d'exclamation
!
dans votre mot de passe.J'ai fait et obtenu l'erreur ci-dessus en utilisant MariaDB. Lorsque je l'ai simplifié en chiffres et en lettres, cela a fonctionné. D'autres caractères tels que
@
et$
fonctionnent correctement - 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 à ma correction.
la source
Sous Windows, voici comment résoudre:
C:\Program Files,C:\Program Files (x86)
etC:\ProgramData
la source
Cela peut également se produire si MySQL s'exécute sur un système d'exploitation insensible à la casse, tel que Windows.
par exemple, j'ai trouvé que la tentative de connexion à une base de données en utilisant ces informations d'identification a échoué:
mysql>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Mais cela a réussi:
mysql>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
la source
Si vos longueurs de chaînes de nom de base de données, nom d'utilisateur, mot de passe, etc. dépassent les valeurs indiquées sur https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , vous pourrait également ne pas se connecter, comme c'était le cas dans mon cas.
la source
Aujourd'hui! Solution pour :
Nouvelle installation ou mise à niveau de Wampserver 3.2.0
xamp
Utiliser probablement parmariaDB
défaut est bien.Wamp
le serveur est livré avecmariaDB
et mysql, et installemariaDB
par défaut sur le port 3306 et mysql sur 3307, port parfois 3308.Connectez-vous à
mysql
!À l'installation, il demande d'utiliser
mariaDB
ouMySql
, Mais mariaDB est coché par défaut et vous ne pouvez pas le changer, cochez l'mysql
option et installez.une fois l'installation terminée, les deux s'exécuteront
mariaDB
sur le port par défaut 3306 etmysql
sur un autre port 3307 ou 3308.Faites un clic droit sur l'
wampserver
icône où son exécution devrait être dans le coin inférieur droit, allez sur les outils et voyez votre bonmysql
port d'exécution.Et incluez-le dans votre connexion à la base de données de la même manière que folowng:
Note :
J'utilise pdo.Voir ici pour plus: https://sourceforge.net/projects/wampserver/
la source