Не удается подключиться к экземпляру cloud sql (sql server) из среды GCP Dataflow python

#python #google-cloud-dataflow #google-cloud-sql

#python #google-cloud-dataflow #google-cloud-sql

Вопрос:

Я использую записную книжку Python Jupyter в среде GCP Dataflow. Оттуда мне нужно подключиться к базе данных SQL sever, которая также размещена в GCP Cloud SQL. И среда потока данных, и база данных Cloud SQL принадлежат одному проекту, и база данных находится в том же регионе, что и среда потока данных. В записной книжке я импортирую pymssql и пытаюсь подключиться:

 import pymssql
conn = pymssql.connect(private_IP_address,  'sqlserver', my_password, my_database, port=1433)
  

И затем я получаю этот error_log из журнала базы данных:

 {
textPayload: "
2020-11-05 22:32:11.39 Logon       Login failed for user '0b6ac33c6f3ffacb6ac33c6f3ffac$'. Reason: Token-based server access validation failed with an infrastructure error. Login lacks connect endpoint permission. [CLIENT: 127.0.0.1]
"
insertId: "s=78a0260e8570497095a8a31a7c378bb3;i=1f23ae;b=0539ace45f6f4b56b03c745b0479107b;m=10a6f7f8e7e;t=5b363aac03490;x=9030d75bb0dadd2-0@a1"
resource: {2}
timestamp: "2020-11-05T22:32:11.410576Z"
severity: "INFO"
labels: {23}
logName: "projects/shapiro-metals/logs/cloudsql.googleapis.com/sqlserver.err"
receiveTimestamp: "2020-11-05T22:32:12.582961041Z"
}
  

Я искал и не мог найти никакого простого объяснения того, чего именно мне не хватает; надеясь, что кто-нибудь сможет помочь?

Комментарии:

1. Находятся ли они оба в одной сети VPC? Если да, разрешен ли ваш порт в правилах брандмауэра VPC? Затем проверьте, запущен ли порт 1433, или попробуйте использовать другой порт и попробуйте использовать общедоступный IP-адрес Cloud SQL. Если вы сделали все вышеописанное, вы все еще сталкиваетесь с той же ошибкой?

2. Да, они находятся в одной сети VPC. Сеть проекта по умолчанию. Я добавил правила, которые предоставляют разрешения, но, похоже, это не работает, что бы я ни делал. Я также не понимаю некоторых терминов: что такое target и source ? Является ли источник экземпляром базы данных, а цели — вызывающим кодом? Я также пытался использовать общедоступный IP-адрес и добавил IP-адрес потока данных к разрешенным адресам для экземпляра cloud SQL, а затем получил ту же ошибку в журналах экземпляра SQL.

3. Также может представлять интерес то, что если я ввожу gcloud sql connect shapiro-sql --user=sqlserver в терминал, который находится в среде потока данных, я получаю эту ошибку: ERROR: (gcloud.sql.connect) HTTPError 403: The client is not authorized to make this request. Но когда я выполняю ту же команду на своем терминале ноутбука, он запрашивает у меня пароль, и когда я его предоставляю, он подключается.

4. Обновление; после выполнения этой команды из облачной оболочки: gcloud projects add-iam-policy-binding shapiro-metals --member serviceAccount:100482624970-compute@developer.gserviceaccount.com --role roles/editor Теперь я могу успешно запустить gcloud sql connect shapiro-sql --user=sqlserver , но интерфейс python по-прежнему не работает

Ответ №1:

Столкнувшись с той же ошибкой после перехода на общедоступный IP-адрес и устранения других неполадок, эта проблема аналогична с этим общедоступным трекером, и команда разработчиков Google Cloud SQL работает над решением этой проблемы.

Вы можете включить общедоступные запросы функций отслеживания проблем и добавить комментарий в ветку, которая вас также затрагивает, чтобы гарантировать, что вы будете получать обновления об этом.