我正在尝试通过Google Apps脚本中的SSL连接数据库,引用这些docs。错误是:
Execution failed: Failed to establish a database connection. Check connection string, username and password.
我可以从另一个数据库客户端(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);
}
修改
我提交了一个错误here,它被标记为this other one的副本,作为“P2”优先级。也许这意味着它会很快被修复?
答案 0 :(得分:2)
我可以确认我可以在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()。据推测它也是加密的(基于这样的事实:当相应的实例具有“只允许安全连接连接到此实例。”时,我确实可以获得连接),而且,重要的是,不需要您管理(即不会失去对钥匙和证书的控制。