J'ai un serveur mysql fonctionnant sur x.x.x.x, et je peux y accéder en interne sans problème (bien sûr). Cependant, lorsque j'essaie de me connecter en externe, par exemple avec mysql workbench ou même depuis un serveur externe, le message d'erreur suivant s'affiche: "L'hôte 'bla.bla.bla' n'est pas autorisé à se connecter à ce serveur MySQL".
J'ai fait:
GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY "somepass";
Y a-t-il un autre problème de sécurité fondamental qui me manque?
Tu as besoin de faire
GRANT ALL PRIVILEGES ON *.* TO mysql@'bla.bla.bla' ...
La partie après le @
correspond à l'hôte d'où provient la connexion. Vous n'avez donc autorisé que les connexions provenant de localhost. Vous devez autoriser l'accès de chaque hôte distant nécessaire (ou de tous les hôtes - ... mysql@'%' ...
- le cas échéant).
Pour résoudre ce problème, vous devez exécuter les commandes suivantes:
mysql -u root -p
[enter in your password]
CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'aC0MPL3XPa33W0RD';
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION;
J'avais exactement la même situation.MysQL est installé sur un centOS. Le chemin d'accès à Nirvana est le suivant.
SOLUTION: Je suis allée pêcher dans les iptables et j'ai apporté les modifications suivantes:
Si vous trouvez les énoncés ci-dessous, commentez-les en ajoutant un '#' au début de la ligne.
-A INPUT -s 123.123.123.123/32 -p tcp -m état --état NOUVEAU -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-Host-prohibé
-A SORTIE -p tcp -m tcp --dport 3306 -j ACCEPTER
Redémarrez les iptables en utilisant la commande: service iptables restart
Oui, cela a fonctionné pour moi. J'espère que c'est utile pour quelqu'un.
Quand j'ai eu mon serveur, j'ai même eu le même problème pour accéder à mysql depuis l'application cliente MySQL, Ensuite, j'ai accordé la permission Mysql, avec la requête suivante.
cela a bien fonctionné
**GRANT ALL PRIVILEGES ON db_base.* TO db_user @'%' IDENTIFIED BY 'db_passwd';**
db_base is the database Name
db_user is database User
db_passwd is the database password
Une fois que vous exécutez ce rinçage, par la commande suivante FLUSH PRIVILEGES;
Supposons que si vous souhaitez donner des privilèges pour accéder à certaines tables de la base de données, vous pouvez utiliser la commande suivante
GRANT ALL PRIVILEGES ON db_base.HELLOWORLD TO db_user @'%' IDENTIFIED BY 'db_passwd';
Où HELLOWORLD
est le nom de la table
Je ne connais pas les tenants et les aboutissants de la sécurité derrière cette bind-address
thing, mais simplement en apprenant en installant un serveur Debian sur une machine à boîte virtuelle. Cet invité a une carte réseau virtuelle configurée en pont, de sorte que la maison peut le voir. Son adresse IP est 192.168.1.4. À partir d'un autre ordinateur (192.168.1.3), la connexion a échoué avec bind-address = 127.0.0.1
. La configuration de bind-address = 192.168.1.4
fonctionne correctement. (Sa propre adresse, littéralement) Ce doit être l'interprétation de 127.0.0.1 dans une config virtuelle, pas sûr ...
Êtes-vous connecté en tant qu'utilisateur mysql? Vous pouvez essayer d’exécuter la requête GRANT en tant que: GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY "somepass";
Avez-vous vérifié que mysql workbench essaye la connexion en utilisant le nom d'utilisateur approprié? Avez-vous vidé les privilèges après avoir exécuté la commande grant?