【问题标题】:Google Cloud MySQL access denied through private IP but allowed through public IP通过私有 IP 拒绝 Google Cloud MySQL 访问,但通过公共 IP 允许访问
【发布时间】:2019-10-01 19:34:29
【问题描述】:

我正在尝试通过其私有 IP 从我的 Google Cloud Compute VM 连接到我的 Google Cloud MySQL 实例。两者都在同一个 VPC 中,并且似乎实际到达了 MySQL 实例,但拒绝访问并出现错误:

错误 1045 (28000): 用户 'user'@'ip-address' 的访问被拒绝(使用密码:YES)

我 100% 确定我使用了正确的用户名和密码。如果我尝试从同一个 VM 连接到同一个 MySQL 服务器,并通过公共 IP 使用相同的凭据(使用 SSL),它就可以正常工作。

我尝试连接的用户的主机也设置为通配符(所以它是'user'@'%')。它拥有我要使用的数据库的所有权限(尽管在指示要使用哪个表之前访问被拒绝,所以我不确定这是否相关)。 SHOW GRANTS for user; 的输出为:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'user'@'%' WITH GRANT OPTION

GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'%'

Google documentation 仅建议检查您的凭据,我确实验证了这一点,所以我希望这里的任何人都可以提供答案。

【问题讨论】:

  • 您可能需要GRANT 通过该 IP 访问(或通过通配符允许所有 IP)。能够通过一个 IP 进行连接并不意味着您可以通过另一个 IP 进行连接。
  • @ceejayoz 抱歉,我应该指定已将其设置为通配符 (%)。我会补充的。
  • 谢谢,我会根据这些信息重新打开。
  • 编辑您的问题并显示该用户的授权。
  • 您的虚拟机和 Cloud SQL 是否在同一个 VPC 中?

标签: mysql google-cloud-platform google-cloud-sql


【解决方案1】:

执行 TLS 似乎也会影响私有 IP 连接。对我来说,这在文档中并不清楚,我收到的错误也没有提供太多洞察力。因此,我尝试使用没有客户端密钥/证书的私有 IP 进行连接,而我确实将它们用于公共 IP。

我通过使用相同的客户端证书通过私有 IP 进行连接解决了这个问题。

另外需要注意的是,禁用 TLS 强制并不能解决问题。在我的设置中,禁用 TLS 似乎不是一个选项,即使界面显示它已被禁用。我不知道为什么会这样。

【讨论】:

  • 同样的问题,禁用“SSL”选项,仍然无法通过私有 IP 连接,但 cloud_sql_proxy 有效。 Grrrr。