【发布时间】:2020-11-05 22:44:12
【问题描述】:
我在 GCP 数据流环境中运行 Python Jupyter Notebook。从那里,我需要连接到同样托管在 GCP Cloud SQL 上的 SQL 服务器数据库。 Dataflow 环境和 Cloud SQL 数据库属于同一个项目,并且数据库与 Dataflow 环境位于同一区域。在笔记本中我导入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 '0b6ac33c6f3ffac\0b6ac33c6f3ffac$'. 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%2Fsqlserver.err"
receiveTimestamp: "2020-11-05T22:32:12.582961041Z"
}
我一直在四处寻找,但找不到任何关于我所缺少的确切内容的简单解释;希望有人能帮忙?
【问题讨论】:
-
它们是否都在同一个 VPC 网络中?如果是,您的端口是否在 VPC 防火墙规则中被允许?然后,您是否在端口 1433 上运行或尝试使用不同的端口并尝试使用 Cloud SQL 的公共 IP 地址。如果以上都做了,你还会遇到同样的错误吗?
-
是的,它们在同一个 VPC 网络中。默认项目网络。我添加了授予权限的规则,但无论我做什么,它似乎都不起作用。我也不懂一些命名法:
target和source是什么?源是数据库实例,目标是调用代码吗?我也尝试使用公共 IP 地址,并将数据流 IP 地址添加到云 SQL 实例的允许地址中,然后在 SQL 实例的日志中得到相同的错误。 -
另外有趣的是,如果我在 Dataflow 环境中的终端中输入
gcloud sql connect shapiro-sql --user=sqlserver,我会收到此错误:ERROR: (gcloud.sql.connect) HTTPError 403: The client is not authorized to make this request.但是当我在笔记本电脑终端上发出相同的命令时,它要求我输入密码,当我提供密码时它会连接。 -
更新;从云 shell 发出此命令后:
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 接口仍然无法工作
标签: python google-cloud-dataflow google-cloud-sql