web-dev-qa-db-fra.com

Accéder à une base de données mysql depuis un hôte externe/ip? (par exemple: mysql workbench)

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"; 
  • Et j'ai ouvert le port 3306 dans iptables. 

Y a-t-il un autre problème de sécurité fondamental qui me manque? 

9
Jon

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).

14
Andrew Medico

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;
8
Ahmad

J'avais exactement la même situation.MysQL est installé sur un centOS. Le chemin d'accès à Nirvana est le suivant.

  1. bind-address: DID NOT WORK
  2. accorder l'autorisation: DID NOT WORK
  3. Iptables lorsqu'il est désactivé: DID fonctionne. 

SOLUTION: Je suis allée pêcher dans les iptables et j'ai apporté les modifications suivantes:

  1. Accédez aux iptables en utilisant la commande: vim/etc/sysconfig/iptables
  2. 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

  3. 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.

4
Yoosaf Abdulla

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';

HELLOWORLD est le nom de la table

3
gmhk

Je ne connais pas les tenants et les aboutissants de la sécurité derrière cette bind-addressthing, 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 ...

0
oli

Ê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";

0
jesse reiss

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?

0
eykanal