89 votes

Impossible de se connecter avec l'utilisateur créé dans mysql

En utilisant cette commande

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

J'essaie de me connecter avec :

 mysql -u brian -ppassword

L'erreur est :

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

Je fais cela en tant que Root et j'ai essayé de supprimer les privilèges.

J'ai essayé avec d'innombrables utilisateurs mais cela ne semble pas fonctionner. Je peux créer un utilisateur sans mot de passe et la connexion fonctionne. Ligne de commande et à partir de phpmyadmin

Vérifiez également si l'utilisateur était dans mysql.user, ce qui est le cas.

Des subventions pour les spectacles de Brian :

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |

0 votes

Hmm... que fait SHOW GRANTS FOR brian @ % ; retour ?

191voto

chaos Points 69029

Vous avez probablement ce problème perpétuel de MySQL où l'un des utilisateurs par défaut dans la table des utilisateurs est '' @ localhost ce qui revient à nier tout localhost utilisateurs plus tard dans le tableau. Voici ce que je ferais mysqldump le site mysql et recherchez cette entrée dans la base de données User si elle est trouvée, la supprimer et purger les privilèges.

Pour plus de détails, voir https://dev.mysql.com/doc/refman/5.5/en/connection-access.html .

On pense souvent à tort que, pour un nom d'utilisateur donné, toutes les lignes qui nomment explicitement cet utilisateur sont utilisées en premier lorsque le serveur tente de trouver une correspondance pour la connexion. Ce n'est pas le cas. L'exemple précédent illustre ce point : une connexion établie par jeffrey à partir de h1.example.net est d'abord recherchée non pas par la ligne contenant "jeffrey" comme valeur de la colonne Utilisateur, mais par la ligne sans nom d'utilisateur. Par conséquent, jeffrey est authentifié en tant qu'utilisateur anonyme, même s'il a spécifié un nom d'utilisateur lors de la connexion.

1 votes

Je l'ai en fait. Y a-t-il une meilleure façon de procéder sans affecter ma production ?

0 votes

Vous pourriez déplacer vos entrées nouvellement créées avant, si vous ne voulez pas vous en débarrasser, je suppose. Mais tant qu'il sera là, il continuera à le faire pour les nouveaux utilisateurs. Si vous voulez vous en débarrasser, vous devriez probablement fouiller dans la documentation de MySQL pour savoir pourquoi elle est là, et je suis sûr qu'il y a une raison bizarre à cela, mais je ne m'en souviens pas pour le moment.

0 votes

Des informations supplémentaires à ce sujet. Je suis presque sûr qu'il s'agit de mon problème, mais je ne trouve pas d'autres informations à ce sujet.

48voto

user2509314 Points 141

C'est un problème causé par les utilisateurs anonymes. Une fois que j'ai installé MySQL, je lance toujours

shell> mysql_secure_installation 

et sélectionnez pour définir/modifier le mot de passe Root, supprimer les utilisateurs anonymes, interdire la connexion Root à distance, supprimer la base de données de test. Cela permettra de supprimer l'utilisateur anonyme et de sécuriser votre installation. Cela devrait également résoudre le problème que vous rencontrez.

0 votes

Si je pense que c'est vraiment la bonne réponse, du moins pour tout ce qui n'est pas des bases de données de démonstration complètes. D'une certaine manière, il semble que mysql soit raisonnable en empêchant les utilisateurs de se connecter avant de faire cela (et en supprimant les utilisateurs anonymes), puisque c'est un gros drapeau rouge indiquant qu'une installation n'est pas sécurisée.

23voto

zinking Points 1253
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1 votes

Cela a également fonctionné pour moi, mais pouvez-vous expliquer la logique ?

2 votes

@blackirishman Les changements de privilèges ne prennent pas effet tant que vous n'avez pas supprimé les anciennes permissions et que les nouvelles ne sont pas installées. Je suis sûr que cela serait fait automatiquement sur phpmyadmin. Cela a également fonctionné pour moi ! Merci.

7voto

Russell Silva Points 947

La documentation mysql dit ceci : (de http://dev.mysql.com/doc/refman/5.1/en/adding-users.html ) :

Deux des comptes ont un nom d'utilisateur de monty et un mot de passe de some_pass . Les deux comptes sont des comptes super-utilisateurs avec des privilèges complets pour faire n'importe quoi. Le site 'monty'@'localhost' ne peut être utilisé que lors de la connexion depuis l'hôte local. L'adresse 'monty'@'%' utilise le '%' pour la partie hôte, de sorte qu'elle peut être utilisée pour se connecter à partir de n'importe quel hôte.

Il est nécessaire d'avoir les deux comptes pour monty pour pouvoir se connecter de n'importe où comme monty . Sans le compte localhost, le compte d'utilisateur anonyme pour localhost qui est créé par la commande mysql_install_db serait prioritaire lorsque monty se connecte depuis le l'hôte local. En conséquence, monty serait traité comme un utilisateur anonyme. La raison en est que le compte d'utilisateur anonyme a un nom plus spécifique. Host que la valeur de la colonne 'monty'@'%' et vient donc plus tôt dans l'ordre de tri de la table des utilisateurs.

Dans cette optique, je vous recommande de créer un fichier 'brian'@'localhost' avec les mêmes privilèges.

1 votes

<sarcasme>Quelle belle décision de conception !</sarcasme>.

3voto

Asaph Points 56989

Vous avez oublié les guillemets autour de Brian dans votre déclaration de subvention. Essaie comme ça :

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X