如何使用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指示信息时,您应该获取所有这三个文件。