830 votes

L'hôte 'xxx.xx.xxx.xxx' n'est pas autorisé à se connecter à ce serveur MySQL.

Ça devrait être très simple, mais je ne peut pas Je n'ai jamais réussi à le faire fonctionner.
J'essaie simplement de me connecter à distance à mon serveur MySQL.

  • Se connectant comme :

    mysql -u root -h localhost -p  
  • fonctionne bien, mais j'essaie :

    mysql -u root -h 'any ip address here' -p
  • échoue avec l'erreur :

    ERREUR 1130 (00000) : L'hôte 'xxx.xx.xxx.xxx' n'est pas autorisé à se connecter à ce serveur MySQL.

Dans le mysql.user il y a exactement la même entrée pour l'utilisateur 'Root' avec l'hôte 'localhost' qu'une autre avec l'hôte '%'.

Je suis à bout de nerfs et ne sais pas comment procéder. Toute idée est la bienvenue.

0 votes

Impossible de se connecter en tant que Root dans la plupart des cas en raison d'une précaution de sécurité

1031voto

Yannick Motton Points 9806

Peut-être une précaution de sécurité. Vous pouvez essayer d'ajouter un nouveau compte administrateur :

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Bien que, comme Pascal et d'autres l'ont fait remarquer, ce n'est pas une bonne idée d'avoir un utilisateur avec ce type d'accès ouvert à tout IP. Si vous avez besoin d'un utilisateur administratif, utilisez Root, et laissez-le sur localhost. Pour toute autre action, spécifiez exactement les privilèges dont vous avez besoin et limitez l'accessibilité de l'utilisateur comme Pascal l'a suggéré ci-dessous.

Editar:

Extrait de la FAQ MySQL :

Si vous ne parvenez pas à comprendre pourquoi vous obtenez Accès refusé, supprimez de la table des utilisateurs toutes les entrées dont les valeurs Host contenant des caractères génériques (les entrées entrées qui contiennent des caractères '%' ou '_'). A erreur très courante consiste à insérer une nouvelle avec Host='%' et User='certain_utilisateur', en pensant que cela vous permet de spécifier localhost pour vous se connecter à partir de la même machine. La raison pour laquelle raison pour laquelle cela ne fonctionne pas est que les privilèges par défaut incluent une avec Host='localhost' et User=''. Comme cette entrée a une valeur Host d'hôte 'localhost' qui est plus plus spécifique que '%', elle est utilisée de préférée à la nouvelle entrée lors de connexion à partir de localhost ! La procédure correcte procédure correcte est d'insérer une deuxième entrée avec Host='localhost' et User='certain_utilisateur', ou de supprimer l'entrée entrée avec Host='localhost' et User=''. Après avoir supprimé l'entrée, n'oubliez pas de lancer une instruction FLUSH PRIVILEGES pour recharger les tables d'attribution. Voir également Section 5.4.4, " Contrôle d'accès, étape 1 d'accès, étape 1 : vérification Vérification de la connexion".

23 votes

Bien vu Yannick, cependant je ne lui recommanderais pas d'accorder tous les privilèges à un utilisateur non-Root. Peut-être un ensemble réduit ?

3 votes

En effet, ce ne serait pas une bonne idée, mais permettre à "Root" de se connecter à partir de tous les hôtes est exactement la même chose, puisque c'est le même niveau de privilège.

2 votes

Je pense que tu ne comprends pas mon point de vue Pascal. Le point est que l'utilisateur 'Root' a déjà ces droits, et il veut laisser n'importe quel ip s'authentifier en tant que cet utilisateur. Donc si c'est vraiment ce qu'il veut, l'exemple par défaut de la création d'un nouvel utilisateur administrateur (qui a exactement les mêmes droits) est une alternative à ce qu'il essaie.

357voto

Aditya Bhatt Points 3210

Il faut créer un new MySQL User et attribuer les privilèges comme ci-dessous dans Query prompt via phpMyAdmin ou l'invite de commande :

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Une fois les quatre requêtes effectuées, il devrait se connecter avec username / password

9 votes

J'ai dû redémarrer mysql après avoir effectué les étapes ci-dessus pour que cela fonctionne pour moi.

0 votes

Devez-vous créer un nom d'utilisateur@localhost ? N'est-il pas suffisant de créer simplement username@% ? Je veux dire, si vous créez simplement un nom d'utilisateur@%, ne pourrez-vous pas vous connecter avec cet utilisateur depuis localhost ?

1 votes

Oui, la création d'un @localhost Cela aurait un sens si les privilèges étaient différents d'une manière ou d'une autre, mais ici ils sont les mêmes et cela va probablement être plus déroutant qu'autre chose (comme changer les mots de passe de l'un sans réaliser que l'autre existe et que votre connexion pourrait frapper celui-là).

134voto

Will Points 1283

Mon message d'erreur était similaire et disait L'hôte XXX n'est pas autorisé à se connecter à ce serveur MySQL même si j'utilisais Root. Voici comment s'assurer que Root a les bonnes permissions.

Mon installation :

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Solution

  1. Ouvrez le fichier 'etc/mysql/my.cnf'.

  2. Vérifiez :

    • le port (par défaut, il s'agit de 'port = 3306')
    • bind-address (par défaut, c'est 'bind-address = 127.0.0.1' ; si vous voulez ouvrir à tous, commentez simplement cette ligne. Pour mon exemple, je dirai que le serveur actuel est sur 10.1.1.7)
  3. Accédez maintenant à la base de données MySQL sur votre serveur actuel (disons que votre adresse distante est 123.123.123.123 au port 3306 en tant qu'utilisateur 'Root' et que je veux changer les permissions sur la base de données 'dataentry'. N'oubliez pas de modifier l'adresse IP, le port et le nom de la base de données en fonction de vos paramètres).

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
  4. sudo service mysqld restart

  5. Vous devriez maintenant être en mesure de vous connecter à distance à votre base de données. Par exemple, j'utilise MySQL Workbench et je saisis 'Hostname:10.1.1.7', 'Port:3306', 'Username:Root'.

1 votes

Vous pouvez sauter le use dataentry (puisque la plupart des gens n'auront pas créé cette base de données).

3 votes

J'ai pu le faire sans redémarrer l'ordinateur. mysql service à la fin

12 votes

FLUSH PRIVILEGES devrait vous permettre de ne pas avoir à redémarrer.

82voto

HimalayanCoder Points 940

Vous devez accorder l'accès à l'utilisateur à partir de n'importe quel nom d'hôte.

Voici comment ajouter un nouveau privilège à partir de phpmyadmin

Aller à Privilèges > Ajouter un nouvel utilisateur

enter image description here

Sélectionnez Tout hôte pour le nom d'utilisateur souhaité

enter image description here

0 votes

Monsieur ! Merci beaucoup pour votre réponse, ça a marché pour moi ; simple et rapide !

0 votes

Je pense que cela doit être ajouté au fichier d'aide de MAMP pour Mac. Fonctionne toujours en 2021

30voto

Dennis McLaughlin Points 101

Le message *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server est une réponse du serveur MySQL au client MySQL. Remarquez qu'il renvoie l'adresse IP et non le nom d'hôte.

Si vous essayez de vous connecter avec mysql -h<hostname> -u<somebody> -p et qu'il renvoie ce message avec l'adresse IP, alors le serveur MySQL n'est pas en mesure d'effectuer une recherche inversée sur le client. C'est essentiel car c'est ainsi qu'il fait correspondre le client MySQL aux subventions.

Assurez-vous que vous pouvez faire un nslookup <mysqlclient> depuis le serveur MySQL. Si cela ne fonctionne pas, c'est qu'il n'y a pas d'entrée dans le serveur DNS. Vous pouvez également ajouter une entrée dans le fichier HOSTS du serveur MySQL ( <ipaddress> <fullyqualifiedhostname> <hostname> <- L'ordre ici peut avoir de l'importance).

Une entrée dans le fichier d'hôte de mon serveur permettant une recherche inverse du client MySQL a permis de résoudre ce problème.

1 votes

"est une réponse du serveur MySQL au client MySQL". Merci, je me demandais d'où venait l'erreur, de ma machine ou du serveur. J'ai l'erreur "ERROR 1130 (HY000) :" etc.

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