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?

user2333586
la source
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.

Apesa
la source
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.

MSS
la source
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

caramba
la source
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