使用 API 键在 JavaScript 中发送云 SQL 查询
Using API Keys to send Cloud SQL Queries in JavaScript
我正在尝试从 Google 云 SQL 数据库 (MySQL) 为 public 网站提供服务。
因为它是一个 public 网站,我发现使用 API 密钥 获取访问权限的唯一方法,然后添加它像这样的请求:...?key=FHkdvfio.....
如果我理解正确,云 SQL 数据库端点应该看起来像这样:
jdbc:google:mysql://<my-instance-ip>:3306/<my-database-name>?key=....
我找不到的是如何使用此 API 密钥从 JavaScript 实际发送 SQL 查询的示例。
我使用 JavaScript 的原因是因为网络客户端实际上是 Google Apps Script 驱动 Google Sheet,其前光标 JavaScript 语言.
因为它是一个 PUBLIC、匿名网站,我不能使用任何 Google 为 Apps 脚本或 connection/authentication 方法提供的库,因为最终用户未知,也未从任何已知 IP 地址识别或登录任何已知 Google 帐户。因此,API 键方法。
谁能给我指出正确的方向?
简而言之;您不应该这样做,因为这是一种不安全的做法,并且 MySQL 数据库引擎不支持 API 密钥。您通常不想允许 public 访问甚至连接到您的数据库,因为它可能会暴露安全风险。
通常,网站通过使用 API 调用后端服务器来处理此问题,这些服务器以某种方式进行身份验证。您可以通过托管自己的服务(可能在 Cloud Functions 或 Cloud 运行 中)来复制此模式,该服务对请求进行身份验证并执行实例所需的查询。
或者,考虑使用具有此功能的托管服务(可能是 Firestore)。 Firestore 也将“按使用量付费”,这意味着它的成本将随着您的流量而变化。
我假设您正在关注 this document to use API Key in Cloud SQL. Please note that the API Key mentioned in that document is for requests sent to Cloud SQL Admin API and Cloud SQL Admin API is the API for Cloud SQL instance management and not for accessing data stored in the Cloud SQL databases. You can refer to this document 以了解有关云的更多信息 SQL 管理 API。
如 this document 中所述,连接到云 SQL MySQL 实例的推荐方法是使用 Jdbc.getCloudSqlConnection(url)
。 url
的格式应为 jdbc:google:mysql://subname
,其中 subname
是 Google 云平台控制台中云 SQL 实例概述页面上列出的实例连接名称,其格式为:PROJECT-ID:REGION:INSTANCE-ID
,而不是 <my-instance-ip>:3306/<my-database-name>
.
为了访问云 SQL 实例中的数据库,您需要提供适当的用户名和密码。您可以参考here.
中提到的示例代码
我正在尝试从 Google 云 SQL 数据库 (MySQL) 为 public 网站提供服务。
因为它是一个 public 网站,我发现使用 API 密钥 获取访问权限的唯一方法,然后添加它像这样的请求:...?key=FHkdvfio.....
如果我理解正确,云 SQL 数据库端点应该看起来像这样:
jdbc:google:mysql://<my-instance-ip>:3306/<my-database-name>?key=....
我找不到的是如何使用此 API 密钥从 JavaScript 实际发送 SQL 查询的示例。
我使用 JavaScript 的原因是因为网络客户端实际上是 Google Apps Script 驱动 Google Sheet,其前光标 JavaScript 语言.
因为它是一个 PUBLIC、匿名网站,我不能使用任何 Google 为 Apps 脚本或 connection/authentication 方法提供的库,因为最终用户未知,也未从任何已知 IP 地址识别或登录任何已知 Google 帐户。因此,API 键方法。
谁能给我指出正确的方向?
简而言之;您不应该这样做,因为这是一种不安全的做法,并且 MySQL 数据库引擎不支持 API 密钥。您通常不想允许 public 访问甚至连接到您的数据库,因为它可能会暴露安全风险。
通常,网站通过使用 API 调用后端服务器来处理此问题,这些服务器以某种方式进行身份验证。您可以通过托管自己的服务(可能在 Cloud Functions 或 Cloud 运行 中)来复制此模式,该服务对请求进行身份验证并执行实例所需的查询。
或者,考虑使用具有此功能的托管服务(可能是 Firestore)。 Firestore 也将“按使用量付费”,这意味着它的成本将随着您的流量而变化。
我假设您正在关注 this document to use API Key in Cloud SQL. Please note that the API Key mentioned in that document is for requests sent to Cloud SQL Admin API and Cloud SQL Admin API is the API for Cloud SQL instance management and not for accessing data stored in the Cloud SQL databases. You can refer to this document 以了解有关云的更多信息 SQL 管理 API。
如 this document 中所述,连接到云 SQL MySQL 实例的推荐方法是使用 Jdbc.getCloudSqlConnection(url)
。 url
的格式应为 jdbc:google:mysql://subname
,其中 subname
是 Google 云平台控制台中云 SQL 实例概述页面上列出的实例连接名称,其格式为:PROJECT-ID:REGION:INSTANCE-ID
,而不是 <my-instance-ip>:3306/<my-database-name>
.
为了访问云 SQL 实例中的数据库,您需要提供适当的用户名和密码。您可以参考here.
中提到的示例代码