Ошибка соединения с Jdbc из Google Apps Script - PullRequest
0 голосов
/ 06 июля 2018

Я создал базу данных MySQL для Google Cloud Project для использования вместе со службой Jdbc, предоставляемой Google Apps Script. Все прошло как запланировано со связью. Я в основном подключаюсь, как в документации.

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

Я поделился файлом с другой учетной записью, и внезапно я вижу красную ошибку, говорящую:

'Не удалось установить соединение с базой данных. Проверьте строку подключения, имя пользователя и пароль. '

Ничего не изменилось в коде, но есть ошибка. Когда я возвращаюсь к своей исходной учетной записи и запускаю тот же бит кода, ошибки не возникает. Что здесь происходит? Есть идеи?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Jdbc.getConnection работает как из моей учетной записи, так и из другой учетной записи:

var conn = Jdbc.getConnection('jdbc:mysql://' + IP + ':3306/' + database_name, user, password)

Я действительно смущен, потому что рекомендуемый метод не работает.

Существует два способа установить соединение с Google Cloud База данных SQL с использованием службы JDBC скрипта Apps:

  • (рекомендуется) Подключение с использованием Jdbc.getCloudSqlConnection(url)
  • Подключение с использованием Jdbc.getConnection(url)

Примечания:

  • IP - общедоступный IP-адрес на вкладке ОБЗОР в консоли базы данных: enter image description here
  • Я разрешил любой хост при создании пользователя: enter image description here
0 голосов
/ 12 декабря 2018

Я думаю, что это проблема с разрешением вашего второго аккаунта. Необходимая информация отсутствует в вашем вопросе. Но учетная запись secound, если она запускается от имени другого пользователя, не обязательно будет иметь вашу авторизацию sqlservice. Разрешение,

https://www.googleapis.com/auth/sqlservice

Управление данными в ваших экземплярах Google SQL Service

требуется для использования Jdbc.getCloudSqlConnection(url), в то время как Jdbc#getConnectionUrl() просто требуется разрешение подключения к внешней ссылке

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

Я считаю, что вы можете подключаться только к экземплярам sql, принадлежащим вам, с getCloudSqlConnection(), для которых даже не требуется разрешение на внешнее соединение. Этот метод, вероятно, вызывает ваш экземпляр SQL внутри.

Ссылки:


Заключение

Чтобы подключиться к любой внешней службе, вам необходимо разрешение external_request. Но вам не нужно это разрешение для подключения к вашим собственным документам, скажем, электронные таблицы, принадлежащие вам / имеют право доступа для редактирования - через SpreadsheetApp.openByUrl. Я считаю, что то же самое с Jdbc.getCloudSqlConnection (). Он вызывает ваш Google SQL внутри - поэтому, даже если вы дадите разрешение на внешний запрос, он не будет работать. То, что будет работать для этого метода, - это 1.Устанавливаемые триггеры (которые запускаются как вы). Еще одна вещь, которую я попробую: 2. Добавить вторую учетную запись также как владелец в GCP-IAM (хотя может и не работать).

0 голосов
/ 11 июля 2018

Я бы еще раз перепроверил все диапазоны IP-адресов, которые должны быть в белом списке. Согласно вашему описанию, в первом аккаунте он работал нормально, вероятно, во втором аккаунте Apps Script использует другой IP-адрес для соединения, который не был внесен в белый или белый список с какой-либо опечаткой. Не могли бы вы поделиться скриншотом, как вы точно включили белый список диапазонов из этой статьи ?

...