Доступ запрещен для пользователя 'root' @ 'external ip' (с использованием пароля: ДА) - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над облачным проектом Google и получаю эту ошибку, когда запускаю node index.js / пытаюсь получить доступ к базе данных mysql удаленно.

это полное сообщение об ошибке:

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'external_ip' (using password: YES)
    at Handshake.Sequence._packetToError (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14)
    at Handshake.ErrorPacket (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/sequences/Handshake.js:130:18)
    at Protocol._parsePacket (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/Protocol.js:279:23)
    at Parser.write (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/Parser.js:76:12)
    at Protocol.write (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/Protocol.js:39:16)
    at Socket.<anonymous> (/home/it21695/nodeproject/node_modules/mysql/lib/Connection.js:103:28)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:277:12)
    at readableAddChunk (_stream_readable.js:262:11)
    at Socket.Readable.push (_stream_readable.js:217:10)
    --------------------
    at Protocol._enqueue (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/Protocol.js:145:48)
    at Protocol.handshake (/home/it21695/nodeproject/node_modules/mysql/lib/protocol/Protocol.js:52:23)
    at Connection.connect (/home/it21695/nodeproject/node_modules/mysql/lib/Connection.js:130:18)
    at Object.<anonymous> (/home/it21695/nodeproject/index.js:10:12)
    at Module._compile (internal/modules/cjs/loader.js:678:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)
    at Module.load (internal/modules/cjs/loader.js:589:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:528:12)
    at Function.Module._load (internal/modules/cjs/loader.js:520:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:719:10)

это мой index.js код (существуют тестовая БД и таблица книг):

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'external_ip',
  user     : 'root',
  password : 'password',
  database : 'test',
});

connection.connect();

connection.query('SELECT * from books', function (error, results, fields) {
        if (error) throw error;
        console.log(results);
});

connection.end();

Я добавил порт mysql (3306) к исключениям брандмауэра и предоставил привилегии для пользователя root .я перевел внешние ips mysql и node.js в статический.Я использую пароли, назначенные Google Cloud.

+------------------+----------------+------------+
| user             | host           | grant_priv |
+------------------+----------------+------------+
| root             | %              | Y          |
| root             | external_ip    | Y          |
| mysql.infoschema | localhost      | N          |
| mysql.session    | localhost      | N          |
| mysql.sys        | localhost      | N          |
| root             | localhost      | Y          |
| stats            | localhost      | N          |
+------------------+----------------+------------+

mysql v8.0.11
node.js v10.1.0
нпм v5.6.0

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Эта проблема связана с разрешениями не с nodejs.

Прежде всего, я рекомендую вам установить MySQL Workbech и выполнить тест из этого инструмента.

Также вам необходимо выполнить некоторые настройкив вашу базу данных MySQL, чтобы разрешить эти удаленные корневые соединения, взгляните на этот пост:

Как разрешить удаленное подключение к mysql

0 голосов
/ 06 июня 2018

Перед дальнейшей проверкой приложения обязательно проверьте учетные данные пользователя и права доступа на хост-сервере базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...