以编程方式连接到RDS MySQL(NodeJ,Java)-ER_ACCESS_DENIED_ERROR:拒绝用户访问

时间:2019-06-04 12:51:38

标签: mysql node.js amazon-web-services rds

我正在尝试使用NodeJs mysql库连接到我的RDS(AWS MySQL数据库)。

const mysql = require('mysql');

var connection;

connection = mysql.createConnection({
      host: 'xxx.us-east-1.rds.amazonaws.com',
      port: 3306,
      user: "username",
      password: "MyPassword",
      database: "DbName",
    });

我也在尝试mysql2和续集。他们都给了我相同的结果:

{ error: ER_ACCESS_DENIED_ERROR: Access denied for user 'username'@'myhost, code: 'ER_ACCESS_DENIED_ERROR', errno: 1045, sqlState: '28000' }

但是,此远程数据库设置为public,我可以使用mysql命令连接到它:

mysql -u username -pMyPassowrd -h xxx.us-east-1.rds.amazonaws.com

我还可以使用MySQL Workbench连接到它。

此外,问题不在NodeJ中,因为我能够连接到本地数据库:

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

最后,我的AWS数据库是公开可用的,我可以连接到它,只是出于某种原因不使用NodeJ。

我还没有找到有用的答案。有人遇到这个问题吗?

更新:

尝试使用简单的Connection在Java中进行连接也会返回相同的结果:

final Connection con = DriverManager.getConnection("jdbc:mysql:/xxx.us-east-1.rds.amazonaws.com:3306/DbName", "username", "MyPassword");

更新2:

我没有为Java代码添加一个斜线。我需要使用jdbc:mysql://而不是jdbc:mysql:/。但是NodeJs的实现仍然是一个大谜团。

1 个答案:

答案 0 :(得分:0)

答案很简单,只需添加具有 true 值的 ssl 选项

connection = mysql.createConnection({
      host: 'xxx.us-east-1.rds.amazonaws.com',
      port: 3306,
      user: "username",
      password: "MyPassword",
      database: "DbName",
      ssl: true //this does the trick
    });