You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy连接AWS RDS MySQL遇1045权限错误求助

解决SQLAlchemy连接AWS RDS MySQL的1045访问拒绝错误

排查与修复方案

1. 修正连接字符串格式错误

你的连接字符串存在格式问题:

"mysql+mysqldb://{}:{}:@{}:{}/{}".format(USER, PASSWORD, URI, PORT, DB)

密码与URI之间多了一个冗余的@符号,会导致地址解析异常。正确格式应为mysql+mysqldb://user:password@host:port/db,修正后代码:

engine = create_engine("mysql+mysqldb://{}:{}@{}:{}/{}".format(USER, PASSWORD, URI, PORT, DB), echo=True)

2. 验证RDS端点与网络连通性

  • 确认URI变量填写的是RDS实例的官方端点(AWS控制台RDS详情页可查,格式如xxx.xxxxxx.us-east-1.rds.amazonaws.com),而非自定义域名或错误IP。
  • 若客户端在AWS内部服务(EC2/ECS等),优先使用RDS内网端点,避免公网解析延迟或阻断。

3. 检查MySQL用户权限细节

登录RDS MySQL控制台(本地客户端或AWS查询编辑器),执行以下命令验证:

SELECT user, host FROM mysql.user WHERE user = 'admin';

确保host字段为%(允许所有IP访问)或你当前客户端的公网IP。若为localhost或受限IP,会导致外部登录失败。必要时重新授权:

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES;

4. 处理密码特殊字符转义

若密码包含@、:、/等特殊字符,需进行URL编码后再放入连接字符串:

from urllib.parse import quote_plus
encoded_password = quote_plus(PASSWORD)
engine = create_engine(f"mysql+mysqldb://{USER}:{encoded_password}@{URI}:{PORT}/{DB}", echo=True)

5. 确认安全组与VPC配置

  • 临时将RDS安全组入站规则开放0.0.0.0/0(3306端口)测试,排除IP动态变更导致的访问限制,测试后再缩小IP范围。
  • 若客户端在VPC内,确保实例与RDS同属一个VPC,或通过VPC peering、NAT网关实现连通,安全组间允许3306端口流量。

内容的提问来源于stack exchange,提问作者bomahony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:00