连接数据库时报错:ORA-28040:No matching authentication protocol 解决方案

问题说明:

我的电脑配置说明:

Windows7 64的系统,

JDK 1.8.0_251

Oracle 12c 64的客户端,

PLSQL Developer 12  64的管理工具

在配置本地连接数据库时出现ORA-28040: No matching authentication protocol  错误,这个错误的意思是没有匹配的认证协议;

原因分析:

网上查了主要是说我电脑上orcale的客户端版本和访问的oracle服务端的版本不一致,但我连接的是本地数据库,应该不存在该问题。保险起见,我先在网上找了相关问题的讨论,大家提出的常用解决方案是修改$ORACLE_HOME/network/admin/sqlnet.ora文件里的参数配置,对于该方法跟我的问题的适配性,先持怀疑态度吧。

解决方案:

  • 方法一:

方法一的官方解释是:

This issue is caused by the default setting for allowed logon version in the 12 database.
Note that the SQLNET.ALLOWED_LOGON_VERSION parameter has been deprecated in 12c.
That parameter has been replaced by these:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n

The default setting for the new parameters is 11.  Any client that attempts to connect must 
be at version 11 or higher unless these parameters are explicitly set in the server side sqlnet.ora file.

这段话的意思是,(SQLNET.ALLOWED_LOGON_VERSION)参数在12c中已经被弃用了,被另外两个参数所取代(SQLNET.ALLOWED_LOGON_SERVER,SQLNET.ALLOWED_LOGON_CLIENT)。该参数用来限制可以连接到数据库服务器上的最小客户端版本,12c中这两个新参数的默认值为11,即11g及以上客户端版本可以连接到数据库服务器上。

两个参数区别如下:

SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以连接到12c数据库的客户端版本(client --->orace 12c db)

SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c数据库可以连到哪些版本的数据库(orace 12c db  --->其它版本的oracle db),例如:控制通过DB LINK可连接到哪些版本的oracle库。

具体解决办法:

在Oracle用户下,将%ORACLE_HOME%/network/admin/sqlnet.ora文件(如果没有sqlnet.ora文件,那么就创建一个)最后添加如下的行:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

重启应用,报错仍然存在,这个方法可能对我的问题来说并不适用

  •  方法二:

连接数据库方式不动还是JDBC,然后也不改变sqlnet.ora里的对应的版本配置,复制Oracle路径下的%ORACLE_HOME%jdbclib下的ojdbc7.jar,添加到tomcat路径下的%CATALINA_HOME%lib文件。
说明一下,我电脑上装的是JDK 8,ojdbc7.jar 是基于JDK 7和JDK 8的驱动,添加时要注意对应的版本 ,oracle的jdbc的版本与jdk对应关系可参考另一位博主的文章:https://www.cnblogs.com/zhuitian/p/11581607.html
之后,重启应用,就不再有报错了,完美解决!
 
 
 
原文地址:https://www.cnblogs.com/tongying/p/13324115.html