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

Chr*_*ris 12 ssl jdbc google-apps-script

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

Execution failed: Failed to establish a database connection. Check connection string, username and password.
Run Code Online (Sandbox Code Playgroud)

我可以从另一个数据库客户端(Sequel Pro)使用这些完全相同的参数,它工作正常.我有db接受来自任何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);
}
Run Code Online (Sandbox Code Playgroud)

编辑

我申请的错误在这里它得到了标记为的重复此另一个其为"P2"的优先级.也许这意味着它会很快被修复?

Tim*_*hns 3

我可以确认我可以在 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-----' 
});
Run Code Online (Sandbox Code Playgroud)

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