VBA宏连接Oracle数据库时如何单独指定代理用户ID?
问题原因
你的报错是因为微软自带的Oracle ODBC驱动不支持你写的Uid=userid[代理用户ID]的代理身份认证格式,导致凭证校验失败。单独填userid可以连接成功是因为跳过了代理认证,自然没有对应表的访问权限,和SQL Developer里的表现一致。
解决方法
方法1:修改现有连接字符串配置
把代理用户ID单独放到CONNECT_DATA节点的PROXY_USER参数中即可,修改后的代码如下:
Sub Ora_Connection() Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection Set rs = New ADODB.Recordset ' 请将代码中的“你的代理用户ID”替换为你原来方括号内的代理用户信息 StrCon = "Driver={Microsoft ODBC for Oracle}; Uid=userid;Pwd=UserPWD;" & _ "CONNECTSTRING=(DESCRIPTION=" & _ "(ADDRESS=(PROTOCOL=TCP)" & _ "(HOST=HostName)(PORT=1521))" & _ "(CONNECT_DATA=(SERVICE_NAME=XXXX)(PROXY_USER=你的代理用户ID)));" con.Open StrCon End Sub
如果上述配置仍然报错,可尝试将UID字段调整为你的代理用户ID[userid]的格式,适配部分旧版本驱动的语法要求。
方法2:替换为Oracle官方驱动(推荐)
微软自带的Microsoft ODBC for Oracle驱动已停止维护多年,对Oracle新特性兼容性差,建议安装Oracle官方的ODAC驱动,连接时代理用户配置逻辑和方法1一致,稳定性更高。
连接成功后如果仍然无法查询目标表,执行SQL语句ALTER SESSION SET CURRENT_SCHEMA = 目标表所属的Schema名称切换当前schema即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

