【问题标题】:Access denied for user 'root'@'external ip' (using password: YES)用户'root'@'external ip'的访问被拒绝(使用密码:是)
【发布时间】:2018-11-16 10:57:40
【问题描述】:

我正在开发一个谷歌云项目,当我运行 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 用户的权限。我将 mysqlnode.js 外部 ips 转为静态。我使用谷歌云分配的密码。

+------------------+----------------+------------+
| 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
npm v5.6.0

【问题讨论】:

  • 需要更多信息来帮助您正确解决您的问题,因为有很多方法可以连接到 Cloud SQL 实例。 - 您使用的是 Cloud SQL 第 2 代还是第 1 代?如果两者都不是,您使用的是什么 GCP 服务? - 您的防火墙规则是否在 VPC 网络 -> 防火墙规则中配置? - 通过mysql客户端连接的结果是什么?

标签: mysql node.js google-cloud-platform


【解决方案1】:

在进一步检查应用程序之前,请确保检查数据库主机服务器上的用户凭据和访问权限。

【讨论】:

    【解决方案2】:

    这个问题与nodejs无关的权限有关。

    首先,我建议您安装 MySQL Workbech 并使用该工具执行测试。

    您还需要在 MySQL 数据库中进行一些配置以允许远程根连接,请查看此帖子:

    How to allow remote connection to mysql

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2013-11-03
      • 2020-09-26
      • 2012-08-08
      • 2013-05-26
      • 2016-08-21
      • 2017-09-26
      • 1970-01-01
      相关资源
      最近更新 更多