使用Node.js连接到云SQL并不总是那么简单.

根据上下文的不同,有时您必须连接到Unix域套接字,允许列出用于TCP连接的IP地址,并在本地运行Cloud SQL Auth代理.确保这些连接的安全是另一个挑战:您可能必须管理SSL证书、防火墙规则、IP地址等.

有没有推荐的Node.js安全便捷接入云SQL的方法?

推荐答案

是的,确实有Cloud SQL Node.js Connector,这是一个Node.js包,它使所有三个受支持的数据库引擎(Postgres、MySQL和SQL Server)在任何地方(本地计算机、Cloud Run、App Engine、Cloud Functions等)都可以轻松且安全地连接到Cloud SQL.

Node.js连接器是云SQL连接库之一(在PythonJavaGo中也有).

连接器与其他方法有什么不同?

Cloud SQL连接库提供了following benefits个:

  • IAM Authorization:连接器使用IAM权限来控制谁和什么可以连接到您的云SQL实例.
  • Improved Security:连接器在客户端连接器和服务器端代理之间使用健壮的、更新的TLS 1.3加密和身份验证,独立于数据库协议.
  • Convenience:连接器消除了使用和分发SSL证书、管理防火墙或源/目标IP地址的要求.
  • IAM Database Authentication (optional):接口支持Cloud SQL’s automatic IAM database authentication feature.

如何使用Node.js连接器...代码是什么样子的?

基本用法(使用pg)

import pg from 'pg';
import {Connector} from '@google-cloud/cloud-sql-connector';
const {Pool} = pg;

const connector = new Connector();
const clientOpts = await connector.getOptions({
  instanceConnectionName: 'my-project:region:my-instance',
  ipType: 'PUBLIC', 
});
const pool = new Pool({
  ...clientOpts,
  user: 'my-user',
  password: 'my-password',
  database: 'db-name',
  max: 5
});
const {rows} = await pool.query('SELECT NOW()');
console.table(rows); // prints returned time value from server

await pool.end();
connector.close();

有关更多使用示例(MySQL、SQL Server、自动IAM授权),请参阅Cloud SQL Node.js Connector's detailed README.

Node.js相关问答推荐

如何修复PayPal Node.js Webhook中Webhook签名验证失败?''

GitLab SAST中的Nodejcan未找到匹配项

FindOne()返回所有值,而不是一个值

Mongodb - 在数组数组中查找()

无法通过 NextJS 访问 HTTP 帖子中的正文

如何在 Docker 容器中 SSO 登录 AWS(使用 aws-sdk v3)

登录用户并获取他们的个人资料

从 Response.json() 返回的 JSON 似乎无效?

fastify:流过早关闭

FirebaseCloudMessaging : PlatformException (PlatformException(null-error, Host platform returned null value for non-null return value., null, null))

部署云功能 Firebase/Stripe 时出错

Node js中向rest服务发送https请求的步骤

如何在 Node.js 的 console.log() 中创建换行符

Node.js + Express + Handlebars.js + 局部视图

异步函数 - 等待不等待promise

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

__dirname 未在 Node 14 版本中定义

Node.js -Firebase 服务帐户私钥不会解析

Route.get() 需要回调函数,但得到对象未定义

使用 Node-sass 缩小 CSS