Ajout d'un utilisateur MySQL pour l'accès à distance


148

J'ai créé un utilisateur user@'%'avec password 'password. Mais je ne peux pas me connecter avec:

mysql_connect('localhost:3306', 'user', 'password');

Lorsque j'ai créé l'utilisateur user@'localhost', j'ai pu me connecter. Pourquoi? «%» Ne signifie-t-il pas de N'IMPORTE QUEL hôte?


Notez que le mot de passe de l'utilisateur @ localhost et de l'utilisateur @% est en général différent, ainsi que les privilèges.
Jose Manuel Gomez Alvarez

Réponses:


378

Pour vous connecter à distance, vous devez avoir le port de liaison MySQL 3306 à l'adresse IP de votre machine dans my.cnf. Ensuite, vous devez avoir créé l'utilisateur à la fois dans localhost et dans le caractère générique '%' et accorder des autorisations sur toutes les bases de données en tant que telles . Voir ci-dessous:

my.cnf (my.ini sous Windows)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

puis

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

ensuite

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
flush privileges;

En fonction de votre système d'exploitation, vous devrez peut-être ouvrir le port 3306 pour autoriser les connexions à distance.


1
Cela m'a aidé à utiliser une instance MySQL privée WebFaction. J'ai suivi vos étapes CREATE USER et GRANT ALL, définies mysql.default_port = <private instance port>dans mon php.ini, puis utilisées 127.0.0.1tout au long de mon nom d'hôte db
spex

Très utile. Juste un commentaire. my.cnf pourrait inclure un autre fichier de configuration de sorte que la ligne appropriée peut être ailleurs. Dans my.cnf, recherchez une ligne commençant par! Include, si l'adresse de liaison n'est pas dans my.cnf, elle pourrait être située dans ce fichier inclus.
tru7

Où est le fichier my.cnf?
Vladimir Despotovic

7
n'oubliez pas de FLUSH PRIVILEGES;)
volkovmqx

4
Pourquoi à la fois localhost et%?
nuits du

21

Suivez les instructions (les étapes 1 à 3 ne sont pas nécessaires dans Windows):

  1. Trouvez la configuration mysql à modifier:

    /etc/mysql/my.cnf (Mysql 5.5)

    /etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  2. Rechercher bind-address=127.0.0.1dans le changement de fichier de configuration bind-address=0.0.0.0(vous pouvez définir l'adresse de liaison à l'une de vos interfaces IP ou comme moi, utilisez 0.0.0.0)

  3. Redémarrez le service mysql exécuté sur la console: service restart mysql

  4. Créez un utilisateur avec un mot de passe sécurisé pour la connexion à distance. Pour ce faire, exécutez la commande suivante dans mysql (si vous êtes un utilisateur Linux pour accéder à la console mysql mysqlet si vous définissez le mot de passe pour l'exécution root mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`

Vous devriez maintenant avoir un utilisateur avec le nom useret le mot de passe de safe_passwordavec une capacité de connexion à distance.


2
change bind-address = 0.0.0.0 ... qui a fonctionné pour moi. et accorder des privilèges
zwitterion

12

pour quel DB est l'utilisateur? regardez cet exemple

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

donc pour revenir à vous interroger l'opérateur "%" signifie tous les ordinateurs de votre réseau.

comme aspesa montre, je suis également sûr que vous devez créer ou mettre à jour un utilisateur. recherchez tous vos utilisateurs mysql:

SELECT user,password,host FROM user;

dès que vous avez configuré votre utilisateur, vous devriez pouvoir vous connecter comme ceci:

mysql -h localhost -u gmeier -p

J'espère que ça aide


généralement, pour tous les db. Je veux juste me connecter, pas sélectionner DB. codemysql_connect ('localhost: 3306', 'utilisateur', 'mot de passe'); code
user2333586

sur quel OS êtes-vous, Windows, Linux ??
apesa

les fenêtres. serveur wamp.
user2333586

Vous devrez vous assurer que votre adresse IP est liée au port 3306. Dans Windows, vous pouvez utiliser netstat -n pour voir quels ports sont liés à votre IP. Si vous voyez 127.0.0.1:3306, vous ne pourrez pas vous connecter à partir d'autre chose que localhost
apesa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.