web-dev-qa-db-fra.com

NodeJS/mySQL - ER_ECCESS_DENIED_ERROR Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec mot de passe: YES)

J'essaie de me connecter à MySQL via un fichier NodeJS, mais le message d'erreur suivant s'affiche:

{ Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
    at Handshake.Sequence._packetToError (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/sequences/Sequence.js:30:14)
    at Handshake.ErrorPacket (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/sequences/Handshake.js:67:18)
    at Protocol._parsePacket (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:197:24)
    at Parser.write (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (_stream_readable.js:555:20)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.Push (_stream_readable.js:134:10)
    --------------------
    at Protocol._enqueue (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:110:26)
    at Protocol.handshake (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/protocol/Protocol.js:42:41)
    at Connection.connect (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:81:18)
    at Connection._implyConnect (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:222:10)
    at Connection.query (/home/matthew/Node/mySqlTest/node_modules/mysql/lib/Connection.js:137:8)
    at Object.<anonymous> (/home/matthew/Node/mySqlTest/index.js:11:12)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000',
  fatal: true }

La chose étrange est que je peux me connecter très bien via le terminal en exécutant mysql -u root -p. Je ne reçois que cette erreur lors de l'exécution de mon javascript. J'ai parcouru Google et StackOverflow, mais je n'ai toujours pas trouvé de solution qui fonctionne. J'utilise MySQL 5.7.16 sur Ubuntu 16.04.1 sur une machine virtuelle. Pas sûr si un VM fait une différence ici. Mon code Javascript est ci-dessous:

'use strict';                                                                                                                                      

var mysql = require('mysql');

var connection = mysql.createConnection({
    Host: 'localhost',
    user: 'root',
    password: 'password'
});

connection.query(
    'SELECT "foo" AS first_field, "bar" AS second_field',
    function(err, results, fields) {
        console.log(err);
        console.log(results);
        connection.end();
    }
);

J'ai essayé d'utiliser 'locahost' ainsi que '127.0.0.1' dans mon javascript. J'ai un utilisateur 'root' pour 'localhost' et '127.0.0.1' dans la table mySql.user et je peux le voir en exécutant SELECT user, Host FROM mysql.user WHERE user='root';

J'ai ajouté des privilèges à l'utilisateur 'root' en exécutant ceci:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password';

J'ai couru ce qui précède sur 127.0.0.1 aussi. J'ai aussi essayé ceci:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

J'ai essayé de réinitialiser le mot de passe root comme suit: https://help.ubuntu.com/community/MysqlPasswordReset

J'ai exécuté FLUSH PRIVILEGES après chaque tentative. J'ai arrêté et redémarré MySQL. J'ai complètement désinstallé et réinstallé mySQL.

Tout en rien. Je reçois l'erreur d'accès refusé chaque fois que j'essaie d'exécuter le javascript, mais je n'ai absolument aucun problème lorsque je me connecte à mySQL via le terminal.

Des idées?

17
mwelk11

Utiliser la version récente de MySQL dans package.json a résolu le problème.

J'utilisais la version 2.0.0. J'ai changé la version à 2.10.2.

1
mwelk11

J'avais un problème similaire. J'exécutais mysql dans un conteneur Docker et je rencontrais la même erreur lorsque j'essayais de me connecter à partir de mon application de nœud. 

Il est apparu que j’avais exécuté le conteneur Docker sans exposer le port; c’était donc le 3306 à l’intérieur du conteneur, mais n’aurais pas été accessible via localhost: 3306. L'erreur ER_ACCESS_DENIED_ERROR s'explique par le fait qu'un autre serveur mysql s'exécutait sur le port 3306, avec un nom d'utilisateur et un mot de passe différents.

Pour voir si ou ce que vous avez en cours d'exécution sur le type de port spécifique:

ps axu | grep 3306

Comme j'avais déjà quelque chose sur le port 3306, pour rendre le serveur accessible à mon application, j'ai changé un port en 3307 et exécuter mon conteneur mysql docker avec la commande: 

docker run --name=<name> -e MYSQL_ROOT_PASSWORD=<password> -p 3307:3306 -d mysql

Après avoir démarré le client mysql dans Docker avec la commande:

docker exec -it <name> mysql -u root -p

Et après avoir créé une base de données à laquelle se connecter, j'ai pu me connecter à ma base de données mysql à partir de mon application de noeud avec ces lignes:

 const connection = mysql.createConnection({
    Host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'database',
    port: 3307
 });

 connection.connect();

Si tout va bien, aide quelqu'un de nouveau à Docker et à MySQL :)

1
kaiak

Pour la version 2.16.0 de MySQL (septembre 2018):

il suffit de créer un nouvel utilisateur sur mysql.

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

remplacer le nom d'utilisateur et le mot de passe.

1
Faris Hanugraha

J'ai eu le même problème et changer le mot de passe de l'utilisateur de la base de données a fonctionné pour moi. Suivez ces étapes :

  1. Ouvrez MySQL Workbench

  2. Ouvrez Local instance MySQL57 en utilisant votre ancien mot de passe

  3. Allez dans Server> Users and Privileges 
  4. Changez le mot de passe et reconnectez-vous à MySQL . OR Créez un nouvel utilisateur et définissez les privilèges. (Si le changement de mot de passe ne fonctionne pas.)
1
marwari

Essayez d'ajouter un champ de port:

var connection = mysql.createConnection({
   Host: 'localhost',
   user: 'root',
   password: 'password',
   port: 3307

});

1
Rahul Paul

// étonnamment cela fonctionne.

var mysql = require('mysql');
var con = mysql.createConnection({
  Host: "localhost",
  user: "root",
  password: ""
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});
1
micheal nayebare

J'ai le même problème, je l'ai résolu en changeant le mot de passe en chaîne vide.

var mysql = require('mysql');
var connection = mysql.createConnection({
    Host: 'localhost',
    user: 'root',
    password: ''
});
1
zhan mei yang

const pool = mysql.createPool({ Host: 'localhost', user: 'root', database: 'database_name', password: 'your_pwd' });

assurez-vous d’avoir épelé les touches et correctement. J'étais confronté à un problème similaire, puis j'ai réalisé que j'avais écrit nom d'utilisateur au lieu de utilisateur

0
gaurish.salunke

J'ai eu la même erreur de script nodejs, donc j'ai supprimé le paramètre de mot de passe et maintenant cela fonctionne comme par magie

var mysql = require('mysql');
var connection = mysql.createConnection({
    Host: 'localhost',
    user: 'root'
});
0
hacktar

J'ai fait face à ce problème en donnant le nom d'utilisateur complet dans la section utilisateur lorsque j'ai changé le 'root' @ 'localhost' en 'root'.

var mysql = require('mysql');

 var con = mysql.createConnection({
  Host: hostname,
  user: "root",
  password: "rootPassword"
 });

 con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
 });
0
Vishnuvardhan