Google Apps脚本中的Jdbc连接错误

时间:2018-07-06 00:40:18

标签: jdbc google-apps-script google-sheets google-cloud-sql

我创建了一个Google Cloud Project MySQL数据库,以与Google Apps脚本提供的Jdbc服务结合使用。连接一切按计划进行。我基本上就像在文档中那样进行连接。

var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

我与另一个帐户共享了文件,突然之间我看到一个红色错误:

'无法建立数据库连接。检查连接字符串,用户名和密码。'

代码未做任何更改,但是有一个错误。当我回到原来的帐户并运行相同的代码时,没有错误。这是怎么回事有什么想法吗?

4 个答案:

答案 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()仅需要外部链接连接权限

  

https://www.googleapis.com/auth/script.external_request

我相信您只能使用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)
  • 进行连接   

注意:

  • IP是数据库控制台中OVERVIEW选项卡中的公共IP地址: enter image description here
  • 创建用户时,我允许任何主机: enter image description here