2012-04-19 4 views
47

J'avais utilisé SQL Server et j'utilise maintenant MySQL pour un projet. Avec SQL Server, nos développeurs peuvent se connecter à la base de données distante sur leurs machines locales s'ils connaissent l'hôte, le nom d'utilisateur, le mot de passe. Avec MySQL, cependant, de donner un accès aux développeurs de leurs machines locales, j'ai eu pour se connecter à MySQL et exécuter:Autoriser toutes les connexions à distance, MySQL

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges; 

address est l'adresse IP de la machine du développeur. Bien sûr, s'ils changent de réseau, je dois l'exécuter à nouveau. Est-il possible d'autoriser toutes les connexions à distance comme je l'ai expérimenté avec SQL Server, ou est-ce une mauvaise idée pour une raison quelconque? Nous avons encore un nom d'utilisateur et un mot de passe ... Je suis évidemment un peu confus.

En outre: il s'agit d'une base de données de développement accessible uniquement depuis notre réseau interne. Je comprends pourquoi c'est une mauvaise idée de donner à tout le monde l'accès à une base de données de production.

+0

Salut. J'ai le même problème et fait toute la commande suggérée mais je ne peux pas accéder à l'accès à distance. Aidez-moi, s'il vous plaît. –

Répondre

114

Comme l'a souligné Ryan ci-dessus, la commande dont vous avez besoin est

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Toutefois, notez que la documentation indique que pour que cela fonctionne, un autre compte utilisateur de localhost doit être créé pour le même utilisateur ; sinon, le compte anonyme créé automatiquement par mysql_install_db est prioritaire car il possède une colonne hôte plus spécifique.

En d'autres termes; pour que l'utilisateur user puisse se connecter à partir de n'importe quel serveur; 2 comptes doivent être créés comme suit:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Lire la documentation complète here.

Et voici la pièce pertinente pour référence:

Une fois connecté au serveur en tant que root, vous pouvez ajouter nouveaux comptes. Les énoncés suivants GRANT pour mettre en place quatre nouveaux comptes:

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; 
mysql> CREATE USER 'admin'@'localhost'; 
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; 
mysql> CREATE USER 'dummy'@'localhost'; 

Les comptes créés par ces déclarations ont les propriétés suivantes:

Deux des comptes ont un nom d'utilisateur de monty et un mot de passe de some_pass. Les deux comptes sont des comptes de superutilisateur avec les pleins privilèges pour faire n'importe quoi. Le compte 'monty' @ 'localhost' ne peut être utilisé que lorsque se connecte depuis l'hôte local. Le compte 'monty' @ '%' utilise le caractère générique '%' pour la partie hôte, il peut donc être utilisé pour se connecter depuis n'importe quel hôte .

Il est nécessaire d'avoir les deux comptes pour être en mesure de se connecter de n'importe où comme.Sans le compte localhost, le compte d'utilisateur anonyme pour localhost qui est créé par mysql_install_db aurait la priorité lorsque monty se connecte depuis l'hôte local . Par conséquent, Monty serait traité comme un utilisateur anonyme. La raison en est que le compte d'utilisateur anonyme a une valeur de colonne Hôte plus spécifique que le compte 'monty' @ '%' et vient ainsi précédemment dans l'ordre de tri de la table utilisateur. (Tri table utilisateur est discuté dans la section 6.2.4, « Contrôle d'accès, étape 1: Vérification de la connexion ».)

Cela me semble ridicule à moins que je suis mal compris cela.

+0

A travaillé parfaitement. Merci! –

10
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Permet à un utilisateur spécifique de se connecter à partir de n'importe où. Il est mauvais car il supprime un certain contrôle de sécurité, c'est-à-dire si un compte est compromis.

+2

souhaite que je pourrais accepter le vôtre aussi. Merci! –

+2

Une autre chose que je devais faire était l'interface de liaison TCP. Comme je devais me connecter à une instance de mysql hébergée dans le cloud, j'ai changé "bind-address = 0.0.0.0" dans /etc/mysql/my.cnf, la valeur par défaut est 127.0.0.1 où mysql n'écoute que sur l'interface de loopback locale et ne prend pas appels provenant de réseaux extérieurs. –

+0

J'ai eu du mal à comprendre comment se connecter à partir de n'importe où et ces solutions m'ont juste aidé à résoudre ce problème initial. Merci beaucoup mais j'ai rencontré un problème différent. J'ai essayé de changer le numéro de port de 80 à 8080. Maintenant, quand j'utilise http: // servername: 8080/mysite, il revient rapidement à http: // servername/mysite donne un 404 - fichier ou répertoire non trouvé Erreur. Comment puis-je le faire fonctionner avec le port 8080? De bonnes choses – Kenny

18

Vous pouvez désactiver toute sécurité en éditant /etc/my.cnf:

[mysqld] 
skip-grant-tables 
+0

un bon! Merci! :) – Adrian

+0

J'aime celui-ci! – adbarads

2

vous devez également désactiver la ligne ci-dessous dans le fichier de configuration: bind-address = 127.0.0.1

1
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass'; 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%' 
3

Installer et configurer mysql pour se connecter de n'importe où à distance

NE FONCTIONNE PAS AVEC mysql_secure_installation! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

Sur Ubuntu, Installer MySQL avec:

sudo apt-get install mysql-server 

ont juste le bas dans /etc/mysql/my.cnf

[mysqld] 
#### Unix socket settings (making localhost work) 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 

#### TCP Socket settings (making all remote logins work) 
port   = 3306 
bind-address = 0.0.0.0 

Connectez-vous en DB de serveur à l'aide

mysql -u root -p

Créer un utilisateur DB en utilisant l'instruction ci-dessous

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’; 

pare-feu ouvert:

sudo ufw allow 3306 

Redémarrez MySQL

sudo service mysql restart 
+0

si quelque chose, accorder tous les privilèges sur *. * À 'nom d'utilisateur' @ '%' identifié par «mot de passe»; '...mais de toute façon ne fonctionne pas –

+0

sudo ufw autoriser 3306 Cela a fait la magie pour moi :) –

+0

La réponse la plus complète, merci! –

Questions connexes