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.
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".
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
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 :
Solution
Vérifier:
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
Sudo service mysqld restart
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
Sélectionnez N'importe quel hôte pour le nom d'utilisateur souhaité
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;
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.
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.
Il suffit d’utiliser l’interface fournie par l’outil graphique de MySql (SQLyog):
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)
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;
Manière simple:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
puis
FLUSH PRIVILEGES;
terminé!
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.
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.)
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".
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.
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! .
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.
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é.
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.
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.
Cela fonctionne pour DirectAdmin ;
DirectAdmin
. MySQL Management
.database
. Accesse Host
, il y a un champ. Vous devez remplir ce champ avec xxx.xx.xxx.xx
.Add Host
. Fini. Vous pouvez maintenant accéder à cette base de données par vos your_database_username
& your_database_password
.
Si simple!
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!
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.
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.