Activer la connexion MySQL à distance: ERROR 1045 (28000): access refusé pour l’utilisateur

MySQL 5.1.31 fonctionne sous Windows XP.

Depuis le serveur MySQL local (192.168.233.142), je peux me connecter en tant que root comme suit:

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

Depuis une machine distante (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 lorsque je tente de me connecter à mysql depuis la machine distante , 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’access à distance?

MODIFIER

Comme suggéré par Paulo ci-dessous, j’ai essayé de remplacer l’entrée mysql.user par% par une entrée spécifique à l’adresse IP. Ma table utilisateur ressemble donc à 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.

Vous devez mettre ceci en tant que root:

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

;

où IP est l’adresse IP que vous souhaitez autoriser à accéder, USERNAME est l’utilisateur que vous utilisez pour vous connecter et PASSWORD est le mot de passe correspondant.

Si vous voulez autoriser l’access depuis n’importe quelle adresse IP, mettez simplement % au lieu de votre adresse IP

et puis il suffit de mettre

 FLUSH PRIVILEGES; 

Ou redémarrez le serveur mysql et c’est tout.

Je recevais la même erreur après avoir accordé l’access à distance jusqu’à ce que je fasse ceci:

De /etc/mysql/my.cnf

Dans les nouvelles versions de mysql, l’emplacement du fichier est /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 le service mysql restart .

Par défaut, dans le serveur MySQL, l’access à distance est désactivé. Le processus pour fournir un access à distance à l’utilisateur est.

  1. Accédez à mon dossier sql bin ou ajoutez-le à PATH
  2. Connectez-vous à root par mysql -uroot -proot (ou quel que soit le mot de passe root).
  3. En cas de succès, vous obtiendrez mysql>
  4. Fournir un access aux subventions pour cet utilisateur.

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

Ici, IP est l’adresse IP pour laquelle vous souhaitez autoriser l’access à distance, si vous mettez % aucune adresse IP ne peut 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 aidera

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’essayais de me connecter depuis un shell Linux

Le shell bash considère le signe dollar comme un caractère spécial pour l’ extension d’une variable d’environnement. Nous devons donc y échapper avec une barre oblique inverse. Incidemment, nous n’avons pas à le faire dans le cas où le signe dollar est le caractère final du mot de passe.

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

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

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

Sur Windows, par défaut, le compte root mysql est créé et ne peut être accessible que depuis localhost, à moins que vous n’ayez sélectionné l’option permettant d’accéder aux 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'; 
  1. Essayez de flush privileges nouveau les flush privileges .

  2. Essayez de redémarrer le serveur pour recharger les allocations.

  3. Essayez de créer un utilisateur avec l’hôte “192.168.233.163”. “%” semble ne pas autoriser tout (c’est bizarre)

Dans mon cas, j’essayais de me connecter à un serveur mysql distant sur OS cent. Après avoir parcouru de nombreuses solutions (accorder tous les privilèges, supprimer les liaisons IP, activer la mise en réseau), le problème n’était toujours pas résolu.

En fin de compte, en examinant diverses solutions, je suis tombé sur iptables, ce qui m’a fait réaliser que le port mysql 3306 n’acceptait pas les connexions.

Voici une petite note sur la façon dont j’ai vérifié et résolu ce problème.

  • Vérifier si le port accepte les connexions:

    telnet (ip serveur mysql) [portNo]

  • Ajout de la règle de table ip pour autoriser les connexions sur le port:

    iptables -A INPUT -i eth0 -p tcp -m tcp –port 3306 -j ACCEPTER

  • Ne le recommanderait pas pour l’environnement de production, mais si vos iptables ne sont pas correctement configurés, l’ajout de règles pourrait ne pas résoudre le problème. Dans ce cas, les étapes suivantes doivent être effectuées:

    service iptables stop

J’espère que cela t’aides.

Si vous utilisez l’IP dynamic, accordez simplement l’access à 192.168.2.%. Vous n’avez donc plus à vous soucier d’accorder l’access à votre adresse IP à chaque fois.

Le nouvel emplacement du fichier de configuration mysql est

 /etc/mysql/mysql.conf.d/mysqld.cnf 

Je me débattais avec la connexion à distance à MYSQL pour mon instance Linux Amazon EC2. La solution consistait à s’assurer que mon groupe de sécurité incluait une règle d’entrée pour le port MySQL 3306 afin d’inclure mon adresse IP (ou 0.0.0.0/0). Immédiatement, j’ai pu me connecter à distance dès que j’ai ajouté cette règle.

Le pilote MySQL ODBC 3.51 indique que les caractères spéciaux du mot de passe ne sont pas gérés.

“Avertissement – MySQL ODBC 3.51 peut vous causer de sérieux problèmes si le mot de passe de votre commande GRANT contient des caractères spéciaux, tels que! @ # $% ^?. MySQL ODBC 3.51 Le pilote ODBC ne prend pas en charge ces caractères spéciaux. Le seul message d’erreur que vous recevez est “Accès refusé” (avec mot de passe: OUI) “- à partir de http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

La combinaison utilisateur / hôte peut avoir été créée sans mot de passe.

Je supposais que lors de l’ajout d’un nouvel hôte pour un utilisateur existant (à l’aide d’une application GUI), le mot de passe existant serait également utilisé pour la nouvelle combinaison utilisateur / hôte.

Je pourrais me connecter avec

 mysql -u username -p PASSWORD 

localement, mais pas d’IPADDRESS avec

 mysql -u --host=HOST -p PASSWORD 

(Je pourrais me connecter à partir d’IPADDRESS sans utiliser de mot de passe)

 mysql -u --host=HOST 

Définition du mot de passe autorisé:

 set password for ''@'' = '';