簡體   English   中英

如何使用nodejs和pem keyfile連接到Cloud SQL實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM