web-dev-qa-db-fra.com

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

Cela devrait être simple, mais je ne peux pas le faire fonctionner pour ma vie.
J'essaie simplement de me connecter à distance à mon serveur MySQL.

se connecter comme

mysql -u root -h localhost -p  

fonctionne bien, mais essayer 

mysql -u root -h 'any ip address here' -p

échoue avec l'erreur

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

Dans la table mysql.user, il existe exactement la même entrée pour l'utilisateur 'root' avec l'hôte 'localhost' et un autre avec l'hôte '%'.

Je suis au bout du rouleau et je ne sais pas comment procéder ... Toutes les idées sont les bienvenues.

556
concept47

Peut-être une mesure 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 noté, ce n’est pas une bonne idée d’avoir un utilisateur avec ce type d’accès ouvert à n’importe quel 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 le suggère Pascal ci-dessous.

Modifier:

De la FAQ MySQL:

Si vous ne pouvez pas comprendre pourquoi vous obtenez Accès refusé, supprimer de l'utilisateur table toutes les entrées qui ont Host valeurs contenant des caractères génériques (entrées contenant les caractères '%' ou '_'). UNE L’erreur la plus courante est d’insérer un nouveau fichier entrée avec hôte = '%' et Utilisateur = 'un_utilisateur', pensant que ceci vous permet de spécifier localhost à connecter à partir de la même machine. Le La raison pour laquelle cela ne fonctionne pas est que les privilèges par défaut incluent un entrée avec Host = 'localhost' et Utilisateur = ''. Parce que cette entrée a un hôte valeur 'localhost' qui est plus Plus spécifique que '%', il est utilisé dans préférence à la nouvelle entrée quand connexion de localhost! La bonne procédure consiste à insérer une deuxième entrée avec Host = 'localhost' et Utilisateur = 'un_utilisateur', ou pour supprimer le entrée avec Host = 'localhost' et Utilisateur = ''. Après avoir supprimé l'entrée, Pensez à émettre un PRIVILÈGES FLUSH instruction pour recharger les tables de subvention . Voir aussi Section 5.4.4, «Accès Contrôle, étape 1: Connexion Vérification".

675
Yannick Motton

Il faut créer un new MySQL User et attribuer les privilèges comme ci-dessous dans Query Prompt via phpMyAdmin ou la commande Invite:

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 cela fait avec les quatre requêtes, il devrait se connecter avec username / password

224
Aditya P Bhatt

Mon message d'erreur était similaire et disait 'Host XXX n'est pas autorisé à se connecter à ce serveur MySQL' même si j'utilisais root. Voici comment vous assurer que root dispose des autorisations appropriées.

Ma configuration :

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Solution

  1. Ouvrez le fichier sous 'etc/mysql/my.cnf'
  2. Vérifier:

    • port (par défaut c'est 'port = 3306')
    • bind-address (par défaut, il s'agit de 'bind-address = 127.0.0.1'; si vous voulez ouvrir à tous, alors commentez juste 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 (par exemple, votre adresse distante est 123.123.123.123 sur le port 3306 en tant qu'utilisateur 'root' et je souhaite modifier les autorisations 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. à 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 pouvoir vous connecter à distance à votre base de données. Par exemple, j'utilise MySQL Workbench et insère 'Hostname: 10.1.1.7', 'Port: 3306', 'Username: root'
95
Will

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

Voici comment ajouter un nouveau privilège depuis phpmyadmin

Aller aux privilèges> Ajouter un nouvel utilisateur

enter image description here

Sélectionnez N'importe quel hôte pour le nom d'utilisateur souhaité

enter image description here

66
HimalayanCoder

Il suffit de suivre les étapes suivantes:

1) Connectez-vous à mysql

mysql -uroot -p

2) Créer un utilisateur

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

3) Accorder des autorisations

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

4) privilèges Flush

FLUSH PRIVILEGES;
53
minhas23

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. Notez comment 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, le serveur MySQL ne pourra pas effectuer de recherche inversée sur le client. Ceci est essentiel car c’est la façon dont le client MySQL est mappé sur les droits accordés. 

Assurez-vous que vous pouvez faire un nslookup <mysqlclient> à partir du serveur MySQL. Si cela ne fonctionne pas, il n'y a pas d'entrée dans le serveur DNS. Alternativement, vous pouvez mettre 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 Host de mon serveur permettant une recherche inversée du client MySQL a résolu ce problème. 

23
Dennis McLaughlin

Si vous modifiez les tables d'attribution manuellement (à l'aide d'INSERT, UPDATE, etc.), vous devez exécuter Une instruction FLUSH PRIVILEGES pour indiquer au serveur de recharger les tables d'attribution. 

PS: je ne recommanderais pas d'autoriser tout hôte à se connecter pour tout utilisateur (surtout pas l'utilisation root) Si vous utilisez mysql pour une application client/serveur, préférez une adresse de sous-réseau. Si vous utilisez mysql avec un serveur Web ou un serveur d'applications, utilisez des adresses IP spécifiques.

14
Pascal Thivent

Il suffit d’utiliser l’interface fournie par l’outil graphique de MySql (SQLyog):

Cliquez sur User Manager:  enter image description here

Maintenant, si vous souhaitez autoriser l'accès POUR TOUT AUTRE PC DISTANT, assurez-vous simplement que, comme dans l'image ci-dessous, la valeur du champ Hôte est% (qui est le caractère générique)

 enter image description here

4
BabaNew

moyen simple est de vous connecter à phpmyadmin avec un compte root, allez à la base de données mysql et sélectionnez le tableau utilisateur, modifiez le compte root et dans le champ Host ajoutez% wild card. puis par privilèges de chasse SSH

 FLUSH PRIVILEGES;
3
user889030

Manière simple: 

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

puis

FLUSH PRIVILEGES;

terminé!

3
user5510975

S'il s'agit d'une installation récente de MySQL, alors avant de changer quoi que ce soit, essayez simplement d'exécuter cette commande, puis essayez à nouveau:

flush privileges;

Cela seul résout le problème pour moi sur Ubuntu 16.04, MySQL 5.7.20. YMMV.

2
Alex R

La plupart des réponses présentées ici montrent que vous créez des utilisateurs avec deux valeurs d'hôte: une pour localhost et une pour %.

Notez que, sauf pour un utilisateur localhost intégré tel que root, vous n'avez pas besoin de le faire. Si vous voulez simplement créer un nouvel utilisateur pouvant se connecter de n'importe où, vous pouvez utiliser

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

et ça marchera très bien. (Comme d'autres l'ont mentionné, c'est une très mauvaise idée d'accorder des privilèges administratifs à un utilisateur de n'importe quel domaine.)

2
Erica Kane

Si vous utilisez Windows, Une solution simple consiste à exécuter l'assistant de configuration d'instance de serveur MySQL. C'est dans votre groupe MYSQL dans le menu Démarrer. Sur le second écran du dernier écran, cochez la case "Autoriser l'accès root à partir de machines distantes".

1
Jan

Ce que vous pouvez faire, c’est ouvrir le fichier mysql.cfg et changer l’adresse Bind en

bind-address = 127.0.0.1

puis redémarrez mysql et vous pourrez connecter ce serveur à cela.

Regardez ceci, vous pouvez avoir une idée de cela.

c'est vrai sol

1
Krishna

Trouvez simplement un meilleur moyen de le faire depuis votre panneau de contrôle d'hébergement (j'utilise DirectAdmin ici)

allez simplement dans la base de données du serveur cible dans votre panneau de contrôle, dans mon cas: Gestion MySQL -> sélectionnez votre DB -> vous trouverez: "Accès hôtes", ajoutez simplement votre hôte distant ici et il fonctionne maintenant! .  enter image description here

Je suppose qu'il existe une option similaire sur d'autres panneaux C.panel tels que Plesk, etc.

J'espère que cela vous a été utile aussi.

1
Eran Levi

Je faisais également face au même problème. Je l'ai résolu en 2 min pour moi, je viens de liste blanche ip via cpanel

Supposons que vous essayez de connecter la base de données du serveur B à partir du serveur A . Accédez au serveur B Cpanel-> Remote MySQL-> entrez l'adresse IP du serveur A et le tour est joué.

0
user3437729

Problème: root @ localhost ne parvient pas à se connecter à une nouvelle installation de mysql-community-server sur openSUSE 42.2-1.150.x86_64 . Mysql refuse les connexions - point.

Solution:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

Le fichier user.MYD a une taille de 0 (vraiment?!) . J'ai copié les 3 fichiers d'un autre système en fonctionnement.

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

Je pouvais me connecter. Ensuite, il suffisait de réappliquer tous les privilèges de schéma . De plus, si vous désactiviez IPv6, réactivez-le temporairement afin que le compte root @ :: 1 puisse également fonctionner.

0
Alex D

Solution CPANEL

Allez dans Cpanel, recherchez MySQL à distance. Ajoutez l'IP dans le champ de saisie:

Hôte (le caractère générique% est autorisé)

Commentaire pour se rappeler quelle adresse IP est-ce. C'était pour moi.

0
user2060451

Cela fonctionne pour DirectAdmin ;

  1. Allez à votre DirectAdmin
  2. Allez à votre MySQL Management.
  3. Sélectionnez votre database
  4. Sous votre onglet Accesse Host, il y a un champ. Vous devez remplir ce champ avec xxx.xx.xxx.xx.
  5. Cliquez sur Add Host

Fini. Vous pouvez maintenant accéder à cette base de données par vos your_database_username & your_database_password.
Si simple!

0

Cette réponse pourrait aider quelqu'un ...

Toutes ces réponses n’ont pas aidé, puis j’ai réalisé que j’avais oublié de vérifier une chose cruciale. Le port :)

J'ai MySQL en cours d'exécution dans un conteneur Docker s'exécutant sur un port différent. Je pointais vers mon ordinateur hôte sur le port 3306, sur lequel un serveur mysql est exécuté. Mon conteneur expose le serveur sur le port 33060. Donc, pendant tout ce temps, je cherchais le mauvais serveur! doh!

0
Srini

Peu de temps après, une personne confrontée à ce problème était confrontée à ce problème depuis SQLyog, ceci s'est produit:

Je m'étais connecté à la base de données distante (à partir de SQLyog) et travaillais pendant quelques heures. Ensuite, j'ai quitté le système pendant quelques minutes, puis je suis revenu pour continuer mon travail - ERREUR 1130 ! Rien que j'ai essayé n'a fonctionné; Redémarrer SQLyog n'a pas résolu le problème. Ensuite, j'ai redémarré le système - cela ne fonctionnait toujours pas.

J'ai donc essayé de me connecter depuis le terminal - cela a fonctionné. Puis réessayé sur SQLyog ... et cela fonctionna. Je ne peux pas l'expliquer autrement que par "bizarrerie aléatoire", mais je pense que cela pourrait aider quelqu'un.

0
Emmanuel
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

cette erreur, car aucun mot de passe à la racine, et cela peut-être s'est produit avec vous lorsque vous essayez de vous connecter de l'extérieur.

0
Abd Abughazaleh