当我尝试连接到 Amazon Aurora 数据库集群,为什么会出现“Access Denied”(访问被拒绝)错误?

2 分钟阅读
0

我想对我的 Amazon Aurora MySQL 兼容版数据库集群进行身份验证,但收到“Access denied”(访问被拒绝)错误。

简短描述

要对 Aurora MySQL 兼容版数据库集群进行身份验证,您可以使用以下选项之一:

出现“Access denied”(访问被拒绝)错误通常是因为您输入了错误的用户名或密码。但是,出现此错误还包括以下其他原因:

  • 您输入的用户名或密码无效。
  • 尝试连接时使用了错误的主机。
  • 该用户不存在。
  • 存在该用户,但客户端主机没有连接的权限。
  • 客户端必须使用 SSL,但未使用。
  • Bash 正在转换密码中的特殊字符。
  • IAM 身份验证已关闭。
  • 使用 IAM 身份验证时,IAM 角色权限不足。
  • 存在错误的连接字符串。
  • 连接到 Amazon RDS 代理时使用的身份验证凭证错误。这适用于使用本机用户名/密码模式的情况。
  • 与客户端关联的 AWS Identity and Access Management(IAM)用户或角色无权连接 Amazon RDS 代理。这适用于使用 IAM 数据库身份验证的情况。

有关此错误的更多信息,请参阅 MySQL 文档中的Access Denied(访问被拒绝)部分。

解决方法

检查数据库实例是否接受连接

请确认您的数据库实例当前处于 AVAILABLE 状态。有关数据库实例状态的更多信息,请参阅 Amazon Relational Database Service(Amazon RDS)Aurora 文档。另请参阅如何解决连接到 Amazon RDS 数据库实例时出现的问题?

排查使用数据库凭证的连接问题

密码错误

尝试连接到数据库时,请务必输入正确的用户名和密码。请勿在密码中包含特殊字符。有关更多信息,请参阅如何重置 Amazon RDS 数据库实例的主用户密码?

用户名错误

检查是否存在该用户:

mysql> SELECT user FROM mysql.user WHERE User='username';

如果该用户不存在,则创建一个新用户:

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'new-password-here';
mysql> FLUSH
        PRIVILEGES;

有关更多信息,请参阅主用户账户权限

从错误的主机连接

尝试连接到数据库实例时,请务必指定正确的主机(带有 -h 标志)和端口。查看 Amazon RDS console(Amazon RDS 控制台)上的 Instance(实例)页面,检查您的 Amazon RDS 主机名和端口。有关更多信息,请参阅连接到 Amazon Aurora 数据库集群

存在该用户,但客户端主机没有连接的权限

检查哪个主机用户/主机 MySQL 允许来自以下的连接:

mysql> SELECT host, user FROM mysql.user WHERE User='username';

然后,使用正确的主机(客户端 IP)创建用户,或者使用 %(通配符)匹配任何可能的 IP 地址:

mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'new-password-here';

客户端必须使用 SSL,但未使用

通过在数据库实例上运行以下查询,检查是否有用户必须使用 SSL:

mysql> SELECT * FROM mysql.user WHERE ssl_type <> '';

如果用户必须使用 SSL,则必须使用 SSL 进行连接。有关更多信息,请参阅 Using SSL/TLS to encrypt a connection to a DB cluster(使用 SSL/TLS 加密与数据库集群的连接)。

重复用户

检查是否有用户的用户名相同:

mysql> SELECT host, user FROM mysql.user WHERE User='username';

要解决此问题,请使用其他用户(重复的主用户)或有删除其他用户权限的用户登录。删除次要用户后,第一个用户可以正常连接。

有关更多信息,请参阅如何为运行 MySQL 的 Amazon RDS 数据库实例创建其他主用户?

Bash 正在转换密码中的特殊字符

给密码加上单引号以防止 Bash 转换特殊字符。

连接数据包中未包含正确的信息

获取连接数据包所需的时间超过 connect_timeout秒。与数据库管理员讨论后,您可以调整此数据库的参数值以更好地了解您的查询和工作负载。

max_allowed_packet 变量值太小或者查询需要的内存超过您为数据库实例分配的内存

默认情况下,max_allowed_packet值很小。这使得该值能够捕获可能错误的大型数据包。如果您使用的是大型 BLOB 列或长字符串,则增加 max_allowed_packet 的值。有关更多信息,请参阅为 Amazon RDS for MySQL 配置参数的最佳实践

排查使用 IAM 身份验证的连接问题

要进行连接,请参阅如何允许用户使用其 IAM 凭证向 Amazon RDS MySQL 数据库实例进行身份验证?

如果您无法连接,请参阅为什么在尝试使用 IAM 身份验证连接到 Amazon RDS for MySQL 时会遇到“访问被拒绝”错误?

排查使用 Amazon RDS 代理的连接问题

要进行连接,请参阅如何使用 Amazon RDS 代理连接到我的 Amazon RDS MySQL 数据库实例或 Aurora MySQL 数据库集群?

如果您无法连接,请参阅为什么我无法使用 RDS 代理连接到我的 Amazon RDS 数据库或 Amazon Aurora 数据库实例?


相关信息

连接到 Amazon Aurora MySQL 数据库集群

适用于 MariaDB、MySQL 和 PostgreSQL 的 IAM 数据库身份验证

使用参数组

如何排查使用 VPC 公有子网或私有子网连接 Amazon RDS 数据库实例时遇到的问题?

AWS 官方
AWS 官方已更新 1 年前