ssl - 如何在谷歌应用程序脚本中使用 SSL 连接到数据库?

标签 ssl jdbc google-apps-script

我正在尝试通过 Google Apps 脚本中的 SSL 连接到数据库,引用这些 docs .错误是:

Execution failed: Failed to establish a database connection. Check connection string, username and password.

我可以使用来自另一个数据库客户端 (Sequel Pro) 的这些完全相同的参数并且它工作正常。我的数据库接受来自任何 IP 地址 (0.0.0.0/0) 的连接。

我相信我已经消除了所有其他变量(用户名、密码等),只有当我尝试在 Apps 脚本中使用 SSL 时才会失败。

谁能提供一个在 Google Apps 脚本中使用 SSL 连接到 MySQL 数据库的工作示例?

我的应用脚本:

function connectDb() {
  var address = 'x.x.x.x';  // no, I'm not literally using x's in my ip address

  var instanceUrl = 'jdbc:mysql://' + address + ':3306/';

  var clientSslKey = '-----BEGIN RSA PRIVATE KEY-----\n' +
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n' +
    /* snip */
    '-----END RSA PRIVATE KEY-----';

  var clientSslCertificate = '-----BEGIN CERTIFICATE-----\n' +
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n' +
    /* snip */
    '-----END CERTIFICATE-----';

  var serverSslCertificate = '-----BEGIN CERTIFICATE-----\n' +
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n' +
    /* snip */
    '-----END CERTIFICATE-----';

  // https://developers.google.com/apps-script/reference/jdbc/jdbc#getconnectionurl-info
  var connParams = {
    user: 'temp',
    // no password set
    _serverSslCertificate: serverSslCertificate,
    _clientSslCertificate: clientSslCertificate,
    _clientSslKey: clientSslKey,
  };
  var conn = Jdbc.getConnection(instanceUrl, connParams);
}

编辑

我提交了一个错误 here它被标记为 this other one 的副本作为“P2”优先级。也许这意味着它很快就会被修复?

最佳答案

我可以确认我可以在 Google Apps 脚本中使用 SSL 连接到 MySQL 数据库。

重要的是要注意useSSL=true确实是必要的

按照 https://issuetracker.google.com/issues/36761592#comment18 中的示例,我能够使其正常工作(相关片段在下面重复):

var conn = Jdbc.getConnection('jdbc:mysql://<ip address>/<db name>?useSSL=true', { 
  user: '<user>', 
  password: '<pass>', 
  _serverSslCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----', 
  _clientSslCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----', 
  _clientSslKey: '-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----' 
});

如果您使用的是 Google Cloud SQL 实例,您可能需要考虑使用 getCloudSqlConnection()。大概它也是加密的(基于这样一个事实,即当相应的实例启用“仅允许安全连接连接到此实例”时我确实可以获得连接),并且重要的是,不需要您管理(即不会失去对 key 的控制并自行认证。

关于ssl - 如何在谷歌应用程序脚本中使用 SSL 连接到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528221/

相关文章:

java - SOAP 请求在 Weblogic 中返回 EOFException

javascript - 使用 Google Apps 脚本在不通知用户的情况下共享云端硬盘文档

javascript - 谷歌应用脚​​本: Parsing XML results in error: "Cannot find function getChildren in object"

node.js - 要求 ssl 为真时无法调用 EWS

java - 从证书和私钥创建 .jks 文件

java - Open Liberty 下 mpRestClient 证书身份验证握手失败

java - 在 hsqldb 中禁用主机名验证

java - 我如何从 PLSQL 中获取表用户定义的类型作为输出参数?

java - 没有数据库的实体类?

javascript - 将新的 Google Sheets 数据附加到 BigQuery 表中