tomcat通过jdbc连接Oracle12c时报ORA-28040:没有匹配的验证协议错误

文章描述了在部署含有Oracle12c数据库连接的Java应用时遇到的ORA-28040错误,该错误通常是由于Oracle、JDK和ojdbc驱动的版本不匹配导致。作者尝试了修改sqlnet.ora文件、替换Web-INF下的ojdbc.jar以及直接在JDK的libext目录下添加ojdbc7.jar的解决方案,最终通过更新JDK中的jar包解决了问题。

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

tomcat通过jdbc连接Oracle12c时报ORA-28040:没有匹配的验证协议错误

提示:Invocation of init method failed; nested exception is java.sql.SQLException: ORA-28040: 没有匹配的验证协议

问题背景

在部署公司产品时,启动tomcat,页面无法打开,查看tomcat运行日志发现,程序报:Invocation of init method failed; nested exception is java.sql.SQLException: ORA-28040: 没有匹配的验证协议


问题原因

查阅Oracle官网发现,oracle、jdk、ojdbc三者存在对应关系,而我的环境为Oracle12c+jdk1.8+ojdbc14(公司程序包)
三者之间适配关系


处理过程

尝试的第一种方法是修改服务器上的sqlnet.ora文件:

文件路径:oracle安装目录\dbhome_1\NETWORK\ADMIN\sqlnet.ora;将该文件末尾加上:SQLNET.ALLOWED_LOGON_VERSION=8,尝试之后以失败告终。


尝试的第二种方法是替换程序包中的ojdbc.jar包

ojdbc7.jar包可以从Oracle客户端程序安装路径获取,获取路径为:\product\11.2.0\client_1\jdbc\lib,选择对应的jar包替换WEB_INFO下的ojdbc14.jar包,启动程序,成功启动。


第三种方法替换jdk中的jar包(推荐此方法):

由于公司是产品级的项目,程序经常迭代,需要频繁替换java文件夹,使用第二种方法没次升级都需要替换jar包,比较繁琐,于是了解到java项目jar包的加载顺序为jdk>tomcat>web,因此可以直接将此jar包放到了jdk安装路径下的jre\lib\ext路径下,问题解决

### 解决Navicat连接Oracle 12C时报ORA-28040的方法 当遇到`ORA-28040: No matching authentication protocol`错误时,这通常是因为客户端使用的安全认证协议与服务器端不匹配。对于Navicat连接Oracle 12c的情况,可以采取以下措施来解决问题。 #### 修改SQLNET.ORA配置文件 为了使旧版客户端能够兼容新的Oracle 12c数据库,可以在数据库服务器上的 `$ORACLE_HOME/network/admin/sqlnet.ora` 文件中设置允许较早版本的身份验证协议[^3]: ```bash SQLNET.ALLOWED_LOGON_VERSION_SERVER=10 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10 ``` 上述参数设定使得服务器接受来自更低版本客户的请求,并且客户也采用较低的安全级别尝试建立会话。完成编辑后保存更改并重启监听器以及数据库实例以应用新设置。 #### 更新Navicat驱动程序 考虑到当前使用的Navicat版本可能并不完全支持最新的Oracle特性,建议检查是否有可用更新或考虑升级至更高版本的产品。新版软件往往包含了对更多类型数据源的支持及优化过的连接机制,有助于减少此类问题的发生概率[^2]。 #### 使用TNSNAMES.ORA定义服务名 另一种方式是在本地计算机上创建或修改 `tnsnames.ora` 来指定目标数据库的服务描述符。确保其中指定了正确的主机地址和服务名称,并通过这种方式建立连接而不是直接输入IP和SID/SERVICE_NAME组合。此方法有时能绕过某些特定环境下的认证差异带来的障碍[^4]。 ```plaintext MYDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = my_service_name) ) ) ``` 以上三种方案可以根据实际情况单独实施或者结合起来使用,从而有效处理因身份验证协议不符而导致的连接失败情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值