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

时间:2015-06-16 11:30:02

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

我尝试使用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)

我做错了什么?

2 个答案:

答案 0 :(得分:2)

看起来您的ssl选项不正确。您已在key参数中放置了“cert”文件。您的ssl配置应如下所示:

  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 instructions

时,您应该获得所有这三个文件

答案 1 :(得分:1)

我只是查找了mysql access denied using password no的快速谷歌搜索,并且MySQL文档本身说当您尝试在不使用密码的情况下登录时会出现此错误消息。 (CTRL + F表示“您试图在没有密码的情况下登录”)。这很可能是问题的根源。

否则,您是否按照how to connect from an external application上的Cloud SQL文档中的说明进行操作?具体而言,您需要确保实例允许您的盒子的IP或IP范围。请注意,如果您位于执行NAT,公司代理,开放代理或您/ ISP所拥有的任何其他私人代理的防火墙后面,则需要确保的IP 允许使用网络节点,因为您的IP数据包似乎来自那里。您可以通过运行dig +short myip.opendns.com @resolver1.opendns.com进行测试,###### FIRST -- import the Visual Studio settings export PATH=$PATH:"/cygdrive/C/Windows/system32" CMD=/cygdrive/c/Windows/system32/cmd ${CMD} /c "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat" # alias for MSBUILD MSBUILD="/cygdrive/c/Program Files (x86)/MSBuild/12.0/Bin/MSBuild.exe" # We're going to do a 64 bit release build BUILD_CONFIG=Release PLATFORM=x64 MSBUILD_LOG=msbuild.log SLN_FILE=$1 "${MSBUILD}" ${SLN_FILE} /fl /property:Configuration=${BUILD_CONFIG};Platform=${PLATFORM} msbuild_rv=$? if [ ${msbuild_rv} != 0 ] then echo "MSBuild ${SLN_FILE} exited with status '${msbuild_rv}'" exit 1 fi grep -q '0 Error(s)' ${MSBUILD_LOG} if [ $? != 0 ] then echo "MSBuild ${SLN_FILE} detected errors" exit 1 fi 将使用外部服务来告诉您IP看起来是什么。

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