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

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

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>首先,用户的问题是:“我想查找解决Druid连接Oracle数据库时出现ORA-28040: No matching authentication protocol错误的方法”。用户提供了几个引用,我需要参考这些内容来回答问题。 关键引用: - [^1]: 提到ORA-28040错误发生在Oracle11g升级到12c时,建议修改sqlnet.ora文件。 - [^2]: 类似错误,涉及SQLPLUS登录。 - [^3]: 详细描述项目中遇到ORA-28040的错误,指出是由于JDBC驱动与数据库版本不匹配,建议检查ojdbc版本。 - [^4]: 使用FineReport连接Oracle时出现相同错误,解决方法涉及修改lib文件夹中的文件。 - [^5]: 明确解决方法:注释掉SQLNET.ALLOWED_LOGON_VERSION参数或修改sqlnet.ora文件。 用户指定了Druid连接Oracle数据库的上下文,所以我需要聚焦于Druid的解决方案。 步骤: 1. **理解错误原因**:ORA-28040错误通常是由于Oracle数据库版本(如12c)的安全协议与连接客户端驱动不匹配。Oracle 12c引入了更强的认证协议,而旧驱动可能不支持。 2. **解决方案核心**: - 升级JDBC驱动(ojdbc)到兼容版本。 - 修改数据库端的sqlnet.ora文件以允许旧的认证协议。 3. **针对Druid**:Druid是一个Java数据库连接池库,使用JDBC驱动连接数据库。所以,解决方案类似于其他JDBC应用。 参考引用中的关键点: - [^3] 强调检查ojdbc版本,升级到匹配版本。 - [^5] 提供数据库端修改sqlnet.ora的方法:注释掉或修改SQLNET.ALLOWED_LOGON_VERSION参数。 我的回答结构: - 按照系统指令: - 使用中文。 - 行内数学格式用$...$(但这个问题不需要数学公式,所以可能不涉及)。 - 独立公式用$$...$$(同样,不需要)。 - 添加引用标识。 - 生成相关问题- 清晰的结构:帮助用户逐步解决问题。 回答大纲: 1. **解释错误原因**:简要说明ORA-28040错误的背景和常见原因。 2. **解决方法**: - **升级JDBC驱动**:推荐升级到ojdbc7或更高版本,兼容Oracle 12c。 - **修改数据库配置**:在Oracle服务器上修改sqlnet.ora文件。 - **结合Druid的具体步骤**:由于Druid使用JDBC驱动,确保项目中使用的驱动版本正确。 3. **详细步骤**: - 确认数据库版本(SELECT * FROM v$version)。 - 检查当前ojdbc版本(在项目依赖中)。 - 升级驱动(例如,使用ojdbc8.jar)。 - 如果升级驱动不可行,修改sqlnet.ora文件。 4. **验证**:重启应用后测试连接。 5. **相关问题**:生成3个相关问题。 添加引用: - 在回答中自然地引用来源,例如:[^1], [^3], [^5]。 最终回答: - 以用户友好方式呈现。 </think>### 解决Druid连接Oracle数据库出现ORA-28040错误的方法 当使用Druid连接Oracle数据库时,出现`ORA-28040: No matching authentication protocol`错误,通常是由于数据库版本升级(如从Oracle 11g迁移到12c或更高版本)后,客户端JDBC驱动与数据库的认证协议不匹配导致的。Oracle 12c引入了更强的安全协议(如`SQLNET.ALLOWED_LOGON_VERSION`),而旧版JDBC驱动(如ojdbc6或更低版本)可能无法支持。以下是基于引用内容和我对Druid连接池的理解,总结的逐步解决方法。解决核心在于**升级JDBC驱动**或**修改数据库配置**,优先推荐升级驱动,以避免安全风险。 #### **步骤1: 确认数据库版本和驱动版本** - **检查数据库版本**:登录Oracle数据库服务器,运行SQL查询确认版本: ```sql SELECT * FROM v$version; ``` 例如,如果结果显示`Oracle Database 12c`,则需要升级驱动或调整配置[^3]。 - **检查Druid项目中使用的JDBC驱动**:Druid本身不包含驱动,它依赖于项目中引入的ojdbc驱动。查看项目的依赖文件(如Maven的`pom.xml`或lib目录中的jar文件)。常见的驱动版本包括: - ojdbc6:兼容Oracle 11g,但与12c可能不兼容。 - ojdbc7或ojdbc8:推荐用于Oracle 12c及更高版本(如ojdbc8支持Oracle 12c、18c、19c)[^3][^5]。 如果驱动版本较旧(如ojdbc6),会触发`ORA-28040`错误,因为认证协议不匹配。 #### **步骤2: 解决方案(两种主要方法)** 选择以下一种方法即可,通常**优先方法1**,因为它更安全且符合Oracle官方推荐。 ##### **方法1: 升级JDBC驱动(推荐)** 升级到兼容版本的ojdbc驱动是首选方案,因为它避免了数据库端的配置修改,且能提升安全性。 1. **下载新版驱动**:从Oracle官网下载ojdbc8.jar(或其他兼容版本,如ojdbc7)。确保版本与数据库匹配: - Oracle 12c:至少使用ojdbc7(推荐ojdbc8)。 - Oracle 18c/19c:使用ojdbc8或更高版本[^3][^5]。 2. **更新项目依赖**: - 如果使用Maven,在`pom.xml`中添加或更新依赖项: ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.9.0.0</version> <!-- 使用最新稳定版本 --> </dependency> ``` - 如果手动管理jar文件,删除旧驱动(如ojdbc6.jar),将新驱动(ojdbc8.jar)添加到项目的`lib`目录(例如,在Druid项目中,路径类似 `/WEB-INF/lib/`)[^4][^5]。 3. **重启应用**:重启Tomcat或其他容器(如Spring Boot应用)。Druid连接池将加载新驱动,错误应消失。 ##### **方法2: 修改数据库端配置(备用方案)** 如果升级驱动不可行(如环境限制),可以修改Oracle服务器的`sqlnet.ora`文件来降低认证协议要求。此方法会放宽安全策略,仅作为临时方案。 1. **登录Oracle服务器**:使用Oracle用户权限操作(非grid用户)。 2. **编辑sqlnet.ora文件**:文件路径通常为 `$ORACLE_HOME/network/admin/sqlnet.ora`。 - 如果文件不存在,创建一个新文件。 - 添加或修改以下行,注释掉旧参数并设置宽松版本: ```properties # 注释或删除原有SQLNET.ALLOWED_LOGON_VERSION参数 # SQLNET.ALLOWED_LOGON_VERSION=8 # 添加新行,允许旧协议(值11对应Oracle 11g兼容模式) SQLNET.ALLOWED_LOGON_VERSION_CLIENT=11 SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 ``` 参数说明: - `SQLNET.ALLOWED_LOGON_VERSION_CLIENT`: 允许客户端使用旧协议。 - `SQLNET.ALLOWED_LOGON_VERSION_SERVER`: 允许服务器接受旧协议。 值`11`表示兼容Oracle 11g级别的认证[^1][^5]。 3. **保存并重启数据库**:保存文件后,重启Oracle数据库服务。 4. **重启应用**:重新启动Tomcat或Druid应用连接池,测试连接是否正常。 #### **步骤3: 验证解决效果** - 使用SQL工具(如SQL*Plus)测试连接是否正常。 - 在Druid日志中检查错误是否消失。如果问题依旧,确保驱动升级正确或配置修改生效(可添加日志级别DEBUG排查)[^3][^4]。 - **注意**:如果应用使用连接池(如Druid),清空连接池或重启容器以确保新配置生效。 #### **为什么这些方法有效?** - **驱动升级**:新ojdbc驱动实现了Oracle 12c的增强协议,解决了协议不匹配问题- **配置修改**:通过`sqlnet.ora`调整认证版本,强制数据库接受旧协议,但可能降低安全性(建议仅用于测试环境)[^1][^5]。 如果上述步骤无效,检查网络配置(如TNS名称是否正确)或Oracle用户权限[^2]。大多数情况下,升级驱动至ojdbc8即可解决[^3][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值