[英]How to connect to Cloud SQL instance using nodejs and pem keyfile
我正在嘗試使用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)
。
我究竟做錯了什么?
看起來您的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說明時,您應該獲得所有這三個文件。
我只是查了一個快速谷歌搜索mysql access denied using password no
,並且MySQL文檔自己說當你嘗試不使用密碼登錄時出現此錯誤消息。 (CTRL + F表示“您試圖在沒有密碼的情況下登錄”)。 這很可能是問題的根源。
否則,您是否按照Cloud SQL文檔中有關如何從外部應用程序進行連接的說明進行操作 ? 具體而言,您需要確保實例允許您的盒子的IP或IP范圍。 請注意,如果您位於執行NAT,公司代理,開放代理或您/ ISP所擁有的任何其他私人代理的防火牆后面,則需要確保允許該網絡節點的IP,如您的IP數據包似乎來自那里。 您可以通過運行dig +short myip.opendns.com @resolver1.opendns.com
來測試這一點,它將使用外部服務告訴您IP看起來是什么。
您可能還需要仔細檢查TLS和Cloud SQL上的文檔,以確保您在這方面所做的一切都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.