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
相关产品推荐
相关产品推荐

