ORA-28040:没有匹配的身份验证协议

时间:2015-12-21 14:34:02

标签: oracle jdbc

即使按照以下设置,我也面临这个问题。

  1. ojdbc14.jar替换ojdbc6.jar [还尝试了ojdbc5.jar]

  2. 添加" SQLNET.ALLOWED_LOGON_VERSION_SERVER=8"到sqlnet.ora 文件[在网络/管理文件夹下]。

  3. 将数据库从11g升级到12c后会发生这种情况。

4 个答案:

答案 0 :(得分:3)

JDBC驱动程序同时具有Java版本和Oracle版本。版本通常是相关的,但是ojdbc14.jar可能支持Oracle的更高版本而不是ojdbc6.jar。确保您使用的是最新版本的ojdbc6.jar。

运行此命令以查看为其构建驱动程序的Oracle版本:

>java -jar ojdbc6.jar -getversion
Oracle 11.2.0.3.0 JDBC 4.0 compiled with JDK6 on Thu_Jun_28_00:38:25_PDT_2012
#Default Connection Properties Resource
#Mon Dec 21 12:38:41 CST 2015

对于SQLNET.ORA更改,为了安全起见,您应该重新启动侦听器和数据库。这听起来很极端,但有些参数require restarting the database

还要确保您正在修改所有相关的SQLNET.ORA文件。如果数据库的Oracle主目录与侦听器的Oracle主目录不同,则应修改它们。

答案 1 :(得分:2)

ORA-28040: No matching authentication protocol

我在尝试连接

时遇到了类似的问题
  

32位Oracle 11g客户端到64位Oracle 12c服务器

然后我继续将以下内容添加到 sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

然后我遇到了以下错误

ORA-01017: invalid username/password: logon denied

将以下内容添加到客户端 sqlnet.ora 以及服务器,我能够将旧版本的Toad和PL / SQL连接到新的12c服务器。

SQLNET.AUTHENTICATION_SERVICES = (NONE)

答案 2 :(得分:1)

首先,ojdbc驱动程序版本之间的区别取决于您使用驱动程序的JDK的版本。 所以ojbdc14适用于JDK 1.4版,ojdbc5适用于JDK 1.5,依此类推。

我目前正在使用带有12c数据库版本的ojdbc7.jar,因为我的环境使用的是JDK 1.7,所以请先升级它。

话虽如此,在{12 {3}}版本的Oracle 12c发布页面中,您可以阅读:

  

<强>目的

     

设置客户端允许的最低身份验证协议,以及   当服务器充当客户端时,例如通过连接   连接到Oracle数据库实例时的数据库链接。

     

使用说明

     

参数名称中的术语VERSION指的是版本   身份验证协议,而不是Oracle数据库版本。

     

如果版本不符合或超过此定义的值   参数,然后使用ORA-28040验证失败:无匹配   身份验证协议错误。

此属性的默认值为11.

允许值为8,10,11,12和12a。

推荐值为12.试试这个。

此外,还有一个有用且有趣的解决方案Parameters for the sqlnet.ora File

答案 3 :(得分:0)

您应该使用最新的JDBC瘦驱动程序(12.1.0.2)和JDK8。使用此配置,您的驱动程序将支持最新版本的数据库密码验证程序,您的问题应该得到解决。