【问题标题】:google cloud platform - mySQL access denied from compute engine instance with public IP谷歌云平台 - 来自具有公共 IP 的计算引擎实例的 mySQL 访问被拒绝
【发布时间】:2023-04-01 07:46:01
【问题描述】:

我使用手册 Connecting using a public IP address 设置了公共 IP 连接。但是,当我尝试使用以下命令从我的计算引擎实例连接到 MySQL 实例时:mysql --host=<MySQL instance IP> -user=<user> --password,我得到mysql Access denied for user.. @ (using password: YES)。 用户\密码是正确的,并且在我的本地客户端工作,但不是来自我的计算引擎实例。

计算引擎实例:Ubuntu 20.04 LTS

mySQL 实例版本:MySQL 5.7

感谢您的帮助。

【问题讨论】:

  • 这是 MySQL 权限问题,不是 GCP 问题。您需要GRANT MySQL 访问来自该 IP 地址的该用户。 mysqltutorial.org/mysql-grant.aspx
  • 旁注:确保您使用的是 MySQL SSL,否则您的登录名和密码将以明文形式发送。 dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
  • MySQL 实例对所有 IP 开放,用户主机字段设置为 % 且未配置 SSL。正如我之前提到的,我可以在我的本地机器上使用这个用户,但不能从我的计算引擎中使用。
  • MySQL 认为从 localhost 连接的用户与来自外部 IP 的相同用户名具有不同的权限。阅读 MySQL 权限和 GRANT 语句。注意:我强烈建议使用 Google Cloud SQL 代理通过 Internet 连接到您的实例。否则,您应该在允许 Internet 身份验证之前配置 SSL。
  • 问题是如果密码中有特殊字符,可以通过bash终端更改

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


【解决方案1】:

此问题与 MySQL 配置有关。

要解决您的问题,您应该按照以下步骤操作:

  1. Find客户端主机的外部ip。
  2. 通过 SSH 连接到您的 MySQL VM 实例。
  3. 连接到mysql和modify你现有的用户:
    RENAME USER 'bob'@'localhost' TO 'bob'@'XXX.226.XXX.220';
    FLUSH PRIVILEGES;
    
    create 一个新的:
    CREATE USER 'bob'@'XXX.226.XXX.220' IDENTIFIED BY 'secure_password';
    GRANT ALL PRIVILEGES ON *.* TO 'bob'@'XXX.226.XXX.220';
    FLUSH PRIVILEGES; 
    
  4. (可选)检查连接(您的登录名和密码发送时未加密):
    $ mysql -u bob -h YYY.71.YYY.6 -p
    Enter password: 
    ...
    mysql> 
    
  5. 按照12 的分步说明,并根据documentation 为远程连接配置SSL/TLS 加密。

【讨论】:

  • MySQL 实例对所有 IP 开放,并且用户主机字段设置为 %。正如我之前提到的,我可以在我的本地机器上使用这个用户,但不能从我的计算引擎中使用。
  • 我已经使用两个 VM 实例检查了我的命令。请尝试按照我的步骤处理 IP。
  • 我尝试了第 3 节中描述的两个选项,但遗憾的是,它们最终都得到了相同的 Access denied 结果。
  • 请用您的命令和输出更新您的问题。
  • 问题是如果密码中有特殊字符,可以通过bash终端更改
猜你喜欢
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2019-02-26
  • 1970-01-01
相关资源
最近更新 更多