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

.NET Core使用MySqlConnector连接AWS RDS实例被拒绝问题排查

问题解答

核心原因

你在错误提示中看到的username@[...].res.rr.com不是你要连接的数据库服务端地址,也不存在路由跳转问题:这是AWS RDS MySQL服务端做身份校验时,对你的客户端出口公网IP做反向PTR解析得到的域名,和你连接字符串中配置的RDS实例地址无关。

MySQL的身份验证采用用户名+客户端来源地址/域名双匹配规则:当你发起连接请求时,RDS实例会先获取你的公网出口IP,对该IP做反向DNS解析得到对应域名(res.rr.com是美国运营商Spectrum的公网IP反向解析默认后缀),再校验是否允许该用户名从这个域名对应的地址访问,匹配失败就会抛出你看到的错误。

为什么MySQL Workbench/终端可以正常连接

通常是两种场景导致:

  • 你在MySQL Workbench中配置了SSH跳板、代理服务,连接RDS的出口IP和你代码直接运行时的出口IP不一致,RDS安全组和账号权限已经放行跳板IP的访问
  • 本地工具默认的连接参数(比如SSL模式、IP协议优先级)和MySqlConnector默认参数不同,触发了不同的权限校验逻辑

解决步骤

  • 先确认代码运行环境的公网出口IP,检查该IP是否已经添加到AWS RDS的安全组入站规则,允许3306端口的访问请求
  • 临时关闭RDS的反向DNS解析校验:在RDS参数组中将skip_name_resolve参数设为ON,之后错误提示会直接显示客户端出口IP,方便你快速定位匹配问题
  • 补全连接字符串的必要参数:如果RDS开启了强制SSL,需要添加Ssl Mode=Required参数;如果使用非默认端口,要显式指定Port=你的RDS端口
  • 核对RDS账号权限:执行SQLSELECT host FROM mysql.user WHERE user='你使用的数据库用户名';,确认该账号允许的访问来源包含你的出口IP,测试阶段可以临时设置为%(生产环境不推荐)

额外建议

你当前封装的Database类存在连接泄漏风险:MySqlConnection本身已经实现了IDisposable接口,不需要额外封装连接的打开关闭逻辑,推荐通过using块按需管理连接生命周期:

// 标准用法示例
public async Task DoDbOperationAsync(string connectionString)
{
    using var connection = new MySqlConnection(connectionString);
    await connection.OpenAsync();
    // 在此执行你的数据库操作
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:01