Connect to RDS MySQL programatically (NodeJs, Java) - ER_ACCESS_DENIED_ERROR: Access denied for user

Connect to RDS MySQL programatically (NodeJs, Java) - ER_ACCESS_DENIED_ERROR: Access denied for user

我正在尝试使用 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 连接到它。

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

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

总而言之,我的 AWS 数据库 public 可用并且我可以连接到它,只是出于某种原因没有使用 NodeJs。

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

更新:

尝试在 Java 中使用简单连接 returns 进行连接,结果也相同:

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的实现还是一大谜团。

答案很简单,只需添加一个 ssl 选项和 true value

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