将 App Engine 连接到云 SQL 拒绝访问

Connecting App Engine to Cloud SQL Access Denied

我正在尝试让我的 Flask App Engine 项目读取存储在 Cloud SQL MySQL 5.7 数据库中的数据。出了点问题,因为我得到的只有 pymysql.err.OperationalError。我一直在按照此处的说明进行操作:https://cloud.google.com/sql/docs/mysql/connect-app-engine.

  1. 云 SQL 管理员 API 已启用。

  2. 根据链接文档:

    App Engine uses a service account to authorize your connections to Cloud SQL. This service account must have the correct IAM permissions to successfully connect. Unless otherwise configured, the default service account is in the format service-PROJECT_NUMBER@gae-api-prod.google.com.iam.gserviceaccount.com.

列出我的项目权限的 IAM 页面不包含上述格式的成员。 "App Engine default service account" 的格式为:my-project-name@appspot.gserviceaccount.com。此服务帐户具有云 SQL 客户和编辑者角色。

  1. 虽然我的查询不成功,但每次尝试后我都会在日志查看器中记录: 7183 [Note] Access denied for user 'www-data'@'cloudsqlproxy~xxx.xxx.xx.xx' (using password: YES) (已编辑 IP 地址)。这有点令人困惑,因为 'www-data' 不是我在代码中指定的用户。

  2. 用于连接的代码:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://' + ':' + db_user + '@/' + db_name + '?unix_socket=/cloudsql/' + connection_name

我哪里出错了,我该如何解决?

此错误是尝试使用错误的凭据连接到数据库时出现的 mySQL 错误。

请验证您使用的值是否正确。

如果您不记得数据库用户名和密码,您可以按照下面的步骤在控制台上更改它,这些步骤也已解释 here

  • Go to CloudSQL console
  • Select your database
  • Go to users
  • next to the user select click on the three dots
  • And select Change password
  • Type the new password and click OK

很可能,您正在本地构建和测试您的应用程序,并在其中提供您的凭据和可以访问 Cloud SQL 的用户名。在构建时,除非您另外指定,否则默认用户名将分配给应用引擎实例。

解决这个问题:

  1. 前往 IAM 和管理
  2. 搜索应用引擎帐户 --> 以 gae-api-prod.google.com.iam.gserviceaccount.com
  3. 结尾
  4. 编辑
  5. 分配权限云SQL客户端

如果这能为您解决问题,请告诉我!