150 votes

Activer la connexion MySQL à distance : ERREUR 1045 (28000) : Accès refusé pour l'utilisateur

MySQL 5.1.31 fonctionnant sous Windows XP.

Desde el local Serveur MySQL (192.168.233.142) Je peux me connecter en tant que Root comme suit :

>mysql --host=192.168.233.142 --user=root --password=redacted

D'un remoto (192.168.233.163), je peux voir que le port mysql est ouvert :

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Mais lorsqu'on essaie de se connecter à mysql à partir de l'application remoto machine, je reçois :

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Je n'ai que 2 entrées dans mysql.user :

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Que dois-je faire de plus pour activer l'accès à distance ?

EDIT

Comme suggéré par Paulo ci-dessous, j'ai essayé de remplacer l'entrée mysql.user pour % par une entrée spécifique à l'IP, de sorte que ma table d'utilisateurs ressemble maintenant à ceci :

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

J'ai ensuite redémarré la machine, mais le problème persiste.

224voto

Octavio Points 961

Tu dois mettre ça en tant que racine :

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

où IP est l'adresse IP à laquelle vous voulez autoriser l'accès, USERNAME est l'utilisateur que vous utilisez pour vous connecter, et PASSWORD est le mot de passe correspondant.

Si vous voulez permettre l'accès à partir de n'importe quelle IP, il suffit de mettre % au lieu de votre IP

et ensuite vous n'avez plus qu'à mettre

FLUSH PRIVILEGES;

Ou redémarrer le serveur mysql et c'est tout.

0 votes

Y a-t-il un moyen de faire cela sans un client mysql local ?

0 votes

Comment supprimer les privilèges d'une ip spécifique ?

5 votes

stackoverflow.com/a/21151255/470749 m'a aidé aussi parce que je suppose que mon paramètre d'adresse de liaison devait être commenté. Accorder des privilèges à distance n'a pas suffi pour que cela fonctionne.

94voto

drumchaps Points 521

J'obtenais la même erreur après avoir accordé l'accès à distance jusqu'à ce que je fasse ceci :

En /etc/mysql/my.cnf

Dans les versions plus récentes de mysql, l'emplacement du fichier est le suivant /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(commenter cette ligne : bind-address = 127.0.0.1 )

Ensuite, exécutez service mysql restart .

8 votes

Ou bien, changez-la en bind-address = 0.0.0.0

3 votes

Je ne fais que commenter bind-address n'a pas fonctionné pour moi. Soit bind-address = 0.0.0.0 o bind-address = <server_ip> travaux.

60voto

Ravi Kant Points 786

Par défaut, l'accès à distance est désactivé dans le serveur MySQL. La procédure pour fournir un accès à distance à un utilisateur est la suivante.

  1. Allez dans mon dossier sql bin ou ajoutez-le à PATH
  2. Connectez-vous à Root by mysql -uroot -proot (ou quel que soit le mot de passe de la racine).
  3. En cas de succès, vous obtiendrez mysql>
  4. Fournir l'accès à tous pour cet utilisateur.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Ici, IP est l'adresse IP pour laquelle vous voulez autoriser l'accès à distance, si nous mettons % n'importe quelle adresse IP peut y accéder à distance.

Exemple :

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Ceci pour un autre utilisateur.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

J'espère que cela vous aidera

0 votes

+1 pour les excellents détails, cela m'a vraiment aidé à voir que 0 rows affected est la norme :) Aussi, service mysqld restart est recommandé à la fin. [ mysqld est parfois juste mysql ]

0 votes

Remarque : Pour la version 5.6+, utilisez "grant all on..." (sans les privilèges). (sans les privilèges)

22voto

Mike Chamberlain Points 5325

L'aide de Paulo m'a conduit à la solution. C'était une combinaison des éléments suivants :

  • le mot de passe contenait un signe dollar
  • J'ai essayé de me connecter à partir d'un shell Linux

Le shell bash traite le signe dollar comme un caractère spécial pour expansion à une variable d'environnement, donc nous devons l'échapper avec un backslash. Par ailleurs, nous Ne le fais pas. devez le faire dans le cas où le signe dollar est le dernier caractère du mot de passe.

Par exemple, si votre mot de passe est "pas$word", à partir de Linux bash nous devons nous connecter comme suit :

# mysql --host=192.168.233.142 --user=root --password=pas\$word

4 votes

En plus de ce qui précède, veuillez vérifier /etc/mysql/my.cnf et commenter bind-address = 127.0.0.1

2 votes

On peut aussi utiliser des guillemets simples pour empêcher l'expansion du $ : mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942

0 votes

'$' dans le mot de passe. Cela n'a pas de prix. Merci beaucoup !

9voto

Vamsi Points 4018

Avez-vous un pare-feu ? Assurez-vous que le port 3306 est ouvert.

Sous Windows, le compte racine mysql est créé par défaut et n'est autorisé à accéder qu'à partir de localhost, à moins que vous n'ayez sélectionné l'option permettant d'activer l'accès à partir de machines distantes lors de l'installation.

créer ou mettre à jour l'utilisateur souhaité avec '%' comme nom d'hôte .

exemple :

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';

6 votes

Le serveur répond avec "ERROR 1045 (28000) : Access denied for"... si un pare-feu bloque, il y aura un timeout...

0 votes

Je voulais juste poster en premier, c'est ma faute.

0 votes

@Krish - Tout ce que vous avez suggéré est déjà couvert dans la question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X