ORACLE 11g客户端访问ORACLE 19C 报错解决ORA-28040:No matching authentication protocol问题

当尝试使用PL/SQL连接Oracle 19C数据库时遇到ORA-28040错误,通过下载并安装Oracle Instant Client 19.14.0,配置PL/SQL首选项,成功解决了认证协议不匹配的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle 11G 有个漏洞无法修复,特升级到19C。但是plsql访问19C的时候报ORA-28040:No matching authentication protocol问题。

1、网上找各种解决办法后,在Oracle官网,一定到官网下载客户端:

Oracle Instant Client Downloads | Oracle 中国 我下载的是instantclient-basic-windows.x64-19.14.0.0.0dbru,下载后在任意路径下解压。

2、打开plsql在首选项里,设置如下:

3、plsql关闭,重新登录,连接成功。 

 

<think>我们正在处理一个关于Kettle连接Oracle数据库时出现ORA-28040错误的用户查询。根据引用内容,这个错误通常发生在使用低版本客户端连接高版本数据库(如12c或19c)时。我们将结合引用内容提供解决方案。引用[1]和[2]提到,可以通过修改数据库端的sqlnet.ora文件来解决,具体是添加一行配置:SQLNET.ALLOWED_LOGON_VERSION=8。同时,引用[1]指出修改后需要重新修改用户密码生效(但引用[2]没有提到需要修改密码,实际中可能不需要,但为了确保,我们可以建议用户如果不行再修改密码)。引用[4]则针对Kettle环境,建议删除Kettle的lib目录下旧的ojdbc.jar,以避免冲突,并使用正确版本的JDBC驱动。因此,我们可以总结以下步骤:步骤1:在Oracle数据库服务器上修改sqlnet.ora文件,添加一行:SQLNET.ALLOWED_LOGON_VERSION=8然后重启数据库监听(或重启数据库)以使配置生效。步骤2:如果步骤1后问题仍然存在,可能需要重置相关用户的密码(因为引用[1]提到需要重新修改用户密码生效)。步骤3:在Kettle客户端,检查lib目录下的JDBC驱动(ojdbc.jar)版本。删除旧的驱动,下载与Oracle数据库版本匹配的JDBC驱动(如12c对应ojdbc8.jar,19c也推荐使用ojdbc8.jar),并放入lib目录。引用[3]提供了OracleJDBC驱动的下载地址:https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html注意:引用[4]特别强调了删除旧的ojdbc.jar的重要性,以避免冲突。因此,我们将按照这些步骤给出解答。同时,根据系统指令,我们需要在行内数学表达式(如果有的话)使用$...$,独立公式使用$$...$$,但本问题不涉及数学公式,所以主要注意格式和中文回答。另外,生成相关问题。</think>针对 Kettle 连接 Oracle 数据库时出现的 **ORA-28040: No matching authentication protocol** 错误,以下是综合解决方案: ### 错误原因 该错误通常发生在低版本客户端连接高版本 Oracle 数据库(如 12c/19c)时,身份验证协议不兼容导致。Kettle 使用的 JDBC 驱动版本过旧是常见原因。 --- ### 解决方案 #### 方法 1:修改数据库配置(推荐) 1. **在 Oracle 服务器端** 修改 `$ORACLE_HOME/network/admin/sqlnet.ora` 文件 添加配置(允许低版本协议): ```ini SQLNET.ALLOWED_LOGON_VERSION=8 ``` > 📌 注:`8` 对应 Oracle 11g 验证协议,`12` 对应 12c+ 协议[^2] 2. **重启数据库监听**: ```bash lsnrctl stop lsnrctl start ``` 3. **重置用户密码**(重要): ```sql ALTER USER <your_username> IDENTIFIED BY <new_password>; ``` > ⚠️ 引用[1]确认必须重置密码才能生效 #### 方法 2:更新 Kettle JDBC 驱动 1. **删除旧驱动**: 移除 Kettle `lib/` 目录下所有 `ojdbc*.jar` 文件(如 `ojdbc6.jar`)[^4] 2. **下载新驱动**: 从 [Oracle JDBC 下载页](https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html) 获取: - Oracle 12c/19c → 选择 `ojdbc8.jar`(JDK 8+) - Oracle 23c → 选择 `ojdbc11.jar` 3. **放入 Kettle**: 将新驱动复制到 `kettle/data-integration/lib/` 目录 #### 方法 3:客户端降级兼容(临时方案) 在 Kettle 启动脚本 `spoon.sh` 或 `Spoon.bat` 中添加 JVM 参数: ```bash -Doracle.jdbc.thinLogonCapability=o3 ``` > 💡 仅用于临时测试,长期使用推荐方法 1 或 2[^3] --- ### 验证步骤 1. 重启 Kettle 2. 测试 Oracle 连接: ```sql -- 使用 SQL 工具验证 SELECT * FROM v$version; ``` 3. 在 Kettle 中新建数据库连接,使用更新后的驱动 > ✅ **优先级建议**: > 生产环境 → **方法 1(服务器配置)** > 无服务器权限 → **方法 2(更新驱动)** --- ### 补充说明 - **驱动冲突**:确保 `lib/` 目录仅保留一个正确版本的 `ojdbc.jar`[^4] - **密码策略**:修改 `sqlnet.ora` 后**必须重置用户密码**才能生效[^1] - **协议版本**: - `SQLNET.ALLOWED_LOGON_VERSION=8` → 兼容 11g 客户端 - `SQLNET.ALLOWED_LOGON_VERSION=11` → 兼容 12c 客户端 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值