如何使用nodejs和pem keyfile连接到云端SQL实例

我正尝试使用pem文件密钥连接到来自nodejs应用程序的Cloud SQL实例。

var fs = require('fs'); var Sequelize = require('sequelize'); var sequelize = new Sequelize('database', 'root', '', { host: '<ip>', dialect: 'mysql', ssl: { ca: fs.readFileSync(__dirname + '/server-ca.pem'), key: fs.readFileSync(__dirname + '/cert.pem') } }); sequelize.query('select * from Users').then(function (users) { console.log(users); }); 

我得到了Possibly unhandled SequelizeAccessDeniedError: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'<ip>' (using password: NO)

我究竟做错了什么?

我只是查找了一个快速的谷歌searchmysql access denied using password no ,和MySQL文件本身说,这个错误信息来自当你尝试login而不使用密码。 (CTRL + F为“你试图login没有密码”)。 这可能是问题的根源。

否则,您是否遵循了Cloud SQL文档中关于如何从外部应用程序进行连接的说明 ? 具体而言,您需要确保您的实例允许您的盒子的IP或IP范围。 请注意,如果您位于执行NAT的防火墙,公司代理,开放式代理或您的ISP拥有的任何其他私有代理之后,则需要确保允许networking节点的IP,如你的IP数据包将会出现在那里。 你可以通过运行dig +short myip.opendns.com @resolver1.opendns.com来testing它,它将使用外部服务来告诉你你的IP是什么。

您可能还想仔细检查TLS和Cloud SQL上的文档,以确保您所做的一切在这方面都很好。

它看起来像你的SSL选项不正确。 您已经在key参数中放入了一个“cert”文件。 你的sslconfiguration应该如下所示:

  ssl: { ca: fs.readFileSync(__dirname + '/server-ca.pem'), cert: fs.readFileSync(__dirname + '/client-cert.pem'), key: fs.readFileSync(__dirname + '/client-key.pem') } 

其中client-key.pem是与client-cert.pem相对应的私钥。 当您遵循Cloud SQL SSL指示信息时,您应该获取所有这三个文件。

Interesting Posts