我创建了一个Google Cloud Project MySQL数据库,以与Google Apps脚本提供的Jdbc服务结合使用。连接一切按计划进行。我基本上就像在文档中那样进行连接。
var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
我与另一个帐户共享了文件,突然之间我看到一个红色错误:
'无法建立数据库连接。检查连接字符串,用户名和密码。'
代码未做任何更改,但是有一个错误。当我回到原来的帐户并运行相同的代码时,没有错误。这是怎么回事有什么想法吗?
答案 0 :(得分:4)
我不确定这个问题是否已经解决,但是让我添加这个答案。
我也遇到了同样的问题,但是我找到了解决方法。我所做的是:
首先,进入控制台。
https://console.cloud.google.com
然后,打开IAM。 并将该帐户添加为成员并添加以下权限:“ Cloud SQL Client”。
答案 1 :(得分:2)
我将再次仔细检查应列入白名单的所有IP范围。根据您的描述,它在第一个帐户中工作正常,可能在第二个帐户中,Apps Script使用了另一个IP进行连接,该IP未被列入白名单或使用某些错字列入白名单。您能否分享屏幕截图,您如何将这个article的范围准确地列入白名单?
答案 2 :(得分:2)
我认为这是您第二个帐户中的权限问题。您的问题中缺少必要的信息。但是,secound帐户如果以其他用户身份运行,则不一定具有您的sqlservice授权。权限
https://www.googleapis.com/auth/sqlservice
管理您的 Google SQL服务实例中的数据
必须使用Jdbc.getCloudSqlConnection(url)
,而Jdbc#getConnectionUrl()
仅需要外部链接连接权限
我相信您只能使用getCloudSqlConnection()
连接到您拥有的sql实例,甚至不需要外部连接权限。此方法可能在内部调用您的sql实例。
结论
要连接到任何外部服务,您需要external_request权限。但是,您不需要该权限即可连接到您自己的文档,例如,您拥有的Spreadsheets /具有编辑访问权限-通过SpreadsheetApp.openByUrl。我相信Jdbc.getCloudSqlConnection()是同一回事。它在内部调用您的Google sql-因此,即使您授予了外部请求权限,也无法使用。此方法的工作原理是1.可安装的触发器(按您的方式运行)。我将尝试做的另一件事是:2.将第二个帐户也添加为GCP-IAM中的所有者(虽然可能无法使用)。
答案 3 :(得分:1)
Jdbc.getConnection可以在我的帐户和另一个帐户中使用:
var conn = Jdbc.getConnection('jdbc:mysql://' + IP + ':3306/' + database_name, user, password)
我真的很困惑,因为recommended方法不起作用。
有两种方法与Google Cloud建立连接 使用Apps Script的JDBC服务的SQL数据库:
- (推荐)使用
进行连接Jdbc.getCloudSqlConnection(url)
- 使用
进行连接Jdbc.getConnection(url)
注意: