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

Excel VBA连接AWS PostgreSQL遇pg_hba.conf相关ODBC错误求助

解决VBA连接AWS RDS PostgreSQL的加密连接错误

这个错误的核心是你的连接未使用加密,且AWS RDS PostgreSQL的配置(默认或你的参数组设置)要求SSL连接。另外注意AWS RDS的pg_hba.conf由AWS管理,你手动修改本地的配置完全无效,必须通过AWS控制台调整数据库参数或安全规则。

具体解决步骤:

  • 修改连接字符串,强制SSL加密
    你的连接字符串缺少SSL相关配置,这是触发错误的直接原因。移除冗余的DSN参数(已指定驱动和服务器信息,DSN会导致冲突),添加SSLmode=require参数:

    cs = "DRIVER=PostgreSQL Unicode(x64); Server=xxxxxxxxxxxx.ap-south-1.rds.amazonaws.com; Port=5432; Database=Test; UID=dbmasteruser; PWD=xxxxxxxxxxxxxxxxxxxxxxxx; SSLmode=require"
    

    若驱动版本较旧,可尝试替换为SSL=true参数。

  • 检查RDS的SSL强制配置
    登录AWS控制台,进入RDS实例的「参数组」页面,查看rds.force_ssl参数:

    • 若值为1:表示强制所有连接使用SSL,你的连接必须带SSL参数才能通过校验(生产环境建议保持此设置)。
    • 若值为0:可关闭强制SSL,但仍建议通过SSL连接保障数据安全。
  • 确认RDS安全组规则
    进入RDS实例的「连接与安全性」标签,检查安全组的入站规则是否允许你的本地IP(124.123.122.82)访问5432端口。即使pg_hba配置正确,安全组拦截也会导致连接失败。

修改后的完整VBA代码:

Sub sbADOExample()
    Dim conNew As New ADODB.Connection
    Dim cs As String
    ' 移除冗余DSN,添加SSL加密参数
    cs = "DRIVER=PostgreSQL Unicode(x64); Server=xxxxxxxxxxxx.ap-south-1.rds.amazonaws.com; Port=5432; Database=Test; UID=dbmasteruser; PWD=xxxxxxxxxxxxxxxxxxxxxxxx; SSLmode=require"

    On Error GoTo conError

    conNew.ConnectionString = cs
    conNew.Open
    If conNew.State = adStateOpen Then
        MsgBox "Connected!"
        Debug.Print "Connected!"
    End If
    Set conNew = Nothing

    pg_db_open = True
    Exit Sub

conError:
    MsgBox "Error: " & Err.Number & " - " & Err.Description
    Set conNew = Nothing
    pg_db_open = False
End Sub

额外提示:如果使用旧版PostgreSQL ODBC驱动,建议下载最新版驱动以确保SSL参数支持正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:25