1. ホーム
  2. javascript

[解決済み] NodeJS/mySQL - ER_ACCESS_DENIED_ERROR ユーザー 'root'@'localhost' (using password: YES) のアクセスが拒否されました。

2022-02-15 14:32:33

質問事項

NodeJSファイルからmySQLに接続しようとしているのですが、以下のエラーが発生します。

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

不思議なのは、ターミナルから、以下のように実行すると、うまく接続できることです。 mysql -u root -p . javascriptを実行するときだけ、このエラーが発生します。GoogleやStackOverflowで調べてみましたが、まだうまくいく解決策は見つかっていません。私はVIRTUAL MACHINE上のUbuntu 16.04.1上でMySQL 5.7.16を使用しています。VMがここで違いを生むかどうかはわかりません。私のJavascriptコードは以下のとおりです。

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

javascriptで'locahost'と'127.0.0.1'を使ってみたのですが、どうでしょうか?mySql.user テーブルに 'localhost' と '127.0.0.1' の両方の 'root' ユーザーがあり、以下を実行することでこれを確認することができます。 SELECT user, host FROM mysql.user WHERE user='root';

これを実行することで、rootユーザーに権限を追加しました。

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

127.0.0.1でも上記を実行しました。また、こんなこともやってみました。

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

このようにrootパスワードのリセットを試みました。 https://help.ubuntu.com/community/MysqlPasswordReset

を実行しました。 FLUSH PRIVILEGES を試行するたびに mySQLを停止して再起動しました。mySQLを完全にアンインストールし、再インストールしました。

すべて無駄です。javascriptを実行しようとすると、毎回アクセス拒否のエラーが出ますが、ターミナルからmySQLに接続すると全く問題がありません。

何か思い当たることはありますか?

解決方法は?

で最新バージョンのMySQLを使用する パッケージ.json は問題を解決しました。

バージョン2.0.0を使用していましたが、2.10.2に変更しました。