wake-up-neo.com

NodeJS/mySQL - ER_ECCESS_DENIED_ERROR Zugriff für Benutzer 'root' @ 'localhost' verweigert (mit Kennwort: YES)

Ich versuche, über eine NodeJS-Datei eine Verbindung zu MySQL herzustellen, ich erhalte jedoch die folgende Fehlermeldung:

{ 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 }

Das Seltsame ist, dass ich durch das Terminal mysql -u root -p eine gute Verbindung über das Terminal herstellen kann. Ich erhalte diese Fehlermeldung nur, wenn ich mein Javascript ausführte. Ich war schon bei Google und StackOverflow dabei, habe aber immer noch keine Lösung gefunden, die funktioniert. Ich verwende MySQL 5.7.16 unter Ubuntu 16.04.1 auf einer virtuellen Maschine. Nicht sicher, ob ein VM hier einen Unterschied macht. Mein Javascript-Code ist unten:

'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();
    }
);

Ich habe versucht, "locahost" sowie "127.0.0.1" in meinem Javascript zu verwenden. Ich habe einen 'root'-Benutzer für' localhost 'und' 127.0.0.1 'in der Tabelle mySql.user. Ich kann dies durch Ausführen von SELECT user, Host FROM mysql.user WHERE user='root'; sehen.

Ich habe dem root-Benutzer Berechtigungen hinzugefügt, indem ich Folgendes ausführte:

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

Das habe ich auch auf 127.0.0.1 laufen lassen. Ich habe das auch probiert:

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

Ich habe versucht, das Root-Passwort wie folgt zurückzusetzen: https://help.ubuntu.com/community/MysqlPasswordReset

Ich habe nach jedem Versuch FLUSH PRIVILEGES ausgeführt. Ich habe mySQL gestoppt und neu gestartet. Ich habe mySQL komplett deinstalliert und neu installiert.

Alles ohne Erfolg. Ich erhalte den Fehler "Zugriff verweigert" jedes Mal, wenn ich versuche, das Javascript auszuführen, aber ich habe absolut keine Probleme, wenn ich mich über das Terminal mit mySQL verbinde.

Irgendwelche Ideen?

17
mwelk11

Die Verwendung der aktuellen MySQL-Version in package.json hat das Problem gelöst.

Ich habe Version 2.0.0 verwendet. Ich habe die Version auf 2.10.2 geändert.

1
mwelk11

Ich hatte ein ähnliches Problem. Ich habe mysql in einem Docker-Container ausgeführt und hatte den gleichen Fehler, als ich versuchte, eine Verbindung von meiner Knoten-App herzustellen. 

Es schien, als hätte ich den Docker-Container ausgeführt, ohne den Port freizulegen. Daher befand sich der Container im Container, 3306 war jedoch nicht über localhost erreichbar. Der Grund für den Fehler ER_ACCESS_DENIED_ERROR war, dass auf dem Port 3306 ein anderer MySQL-Server mit einem anderen Benutzernamen und Kennwort ausgeführt wurde.

Um zu sehen, ob oder was auf dem jeweiligen Port-Typ ausgeführt wird:

ps axu | grep 3306

Da ich bereits etwas an Port 3306 hatte, änderte ich einen Port auf 3307 und führte meinen Docker-Mysql-Container mit dem Befehl aus, um den Server für meine App zugänglich zu machen: 

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

Nach dem Starten des MySQL-Clients in Docker mit dem Befehl:

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

Nachdem ich eine Datenbank erstellt hatte, mit der ich mich verbinden konnte, konnte ich von meiner Knoten-App aus mit folgenden Zeilen eine Verbindung zu meiner MySQL-Datenbank herstellen:

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

 connection.connect();

Hoffentlich hilft jemand neuem für Docker und MySQL :)

1
kaiak

Für MySQL-Version 2.16.0 (September 2018):

erstellen Sie einfach einen neuen Benutzer unter mysql.

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

ersetzen Sie Benutzername und Passwort.

1
Faris Hanugraha

Ich hatte das gleiche Problem und das Ändern des Passworts des Datenbankbenutzers arbeitete für mich. Folge diesen Schritten :

  1. MySQL Workbench öffnen

  2. Öffnen Sie Local instance MySQL57 mit dem alten Passwort

  3. Gehe zu Server> Users and Privileges 
  4. Ändern Sie das Passwort und melden Sie sich erneut bei MySQL an. OR Erstellen Sie einen neuen Benutzer und legen Sie Berechtigungen fest. (Wenn Sie das Passwort ändern, funktionieren Sie nicht.)
1
marwari

Versuchen Sie, ein Portfeld hinzuzufügen:

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

});

1
Rahul Paul

// überraschenderweise funktioniert das.

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

Neuen Benutzer erstellen (anstelle von root) hat mein Problem behoben.

mysql> CREATE USER 'new_user'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

Dann gewähren Sie:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'new_user'@'%' WITH GRANT OPTION;

Dann ändern Sie die Zugangsdaten:

  var connection = mysql.createConnection({
    Host     : 'The mysql IP',
    port     : 'The mysql Port',
    user     : 'new_iser',
    password : 'new_user_pass',
    database : 'database-name'
  }); 
1
YanivN

Ich habe das gleiche Problem, ich habe es gelöst, indem ich das Passwort in eine leere Zeichenfolge änderte.

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' });

vergewissern Sie sich, dass Sie die Schlüssel und die richtige Schreibweise eingegeben haben. Ich war mit einem ähnlichen Problem konfrontiert und stellte fest, dass ich Benutzername anstelle von Benutzer

0
gaurish.salunke

Ich hatte den gleichen Fehler aus dem nodejs-Skript, also entfernte ich den Passwort-Parameter und jetzt funktioniert es magisch

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

Fügen Sie überspringen-gewähren-Tabellen in my.ini hinzu (diese Datei ist im Standardinstallationspfad von mysql verfügbar)

[mysqld]

überspringen-Grant-Tabellen

port = 3306

0
Girish

Wenn noch jemand Probleme hat. Versuchen

var mysql = require("mysql");
var con = mysql.createConnection({
  Host: "127.0.0.1",
  user: "your_username",
  password: "password",
  database: "your_db_name"
});
0
azm_shah

Meistens liegt das Problem darin, wie das eingegebene Passwort vom MySQL-Server interpretiert wird. Bitte folgen Sie dem untenstehenden Link. Es sollte das Problem beheben. MySQL 8.0 - Der Client unterstützt das vom Server angeforderte Authentifizierungsprotokoll nicht. Erwägen Sie ein Upgrade des MySQL-Clients.

0
Chaitanya

Ich bin mit diesem Problem konfrontiert, indem ich den vollständigen Benutzernamen im Benutzerabschnitt angegeben habe, als ich 'root' @ 'localhost' in 'root' geändert habe. Es funktioniert jetzt einwandfrei.

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

Für mich war das Problem innerhalb des SQL-Verbindungsobjekts pass: 'mypassword' anstatt password: 'mypassword'.

0
Valchy

Wenn Sie von localhost aus eine Verbindung zu einem externen Server herstellen, müssen Sie möglicherweise Ihre Gateway-Router-Adresse in das Feld "Zulässige Hosts" von MySQL eingeben.

MySQL Allowable Hosts

Diese Adresse finden Sie nach dem @ -Zeichen in der Fehlermeldung:

Access denied for user 'your_username'@'blah.blah.blah.yourisp.com'
0
Steve Breese