• ORA-28040: No matching authentication protocol


    【故障处理】ORA-28040: No matching authentication protocol

    1>  告警日志中频繁出现Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter、

    ORA-28040: No matching authentication protocol错误

    故障环境介绍

    DB 类型:RAC

    DB version:12.1.0.2

    2>  故障发生现象及报错信息

    复制代码
    告警日志中频繁出现Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter。
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    Using deprecated SQLNET.ALLOWED_LOGON_VERSION parameter.
    
    Sun Oct 27 08:34:58 2019
    
    或JDBC连接Oracle12c报如下错误:
    
    Caused by: java.sql.SQLException: ORA-28040: No matching authentication protocol
    
            at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
    
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
    
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
    
            at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOsesskey(T4CTTIoauthenticate.java:294)
    
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:357)
    
            at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:441)
    
            at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165)
    
            at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    
            at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    
            at java.sql.DriverManager.getConnection(DriverManager.java:582)
    
            at java.sql.DriverManager.getConnection(DriverManager.java:154)
    复制代码

    或者使用9i的客户端去连接12c的数据库就会报ORA-28040: No matching authentication protocol这个错误。

    解决过程

    使用oerr命令来查看,在Oracle 11g下:

    复制代码
     1 [oracle@orcltest ~]$ oerr ora 28040
     2 
     3 28040, 0000, "No matching authentication protocol"
     4 
     5 // *Cause:  No acceptible authentication protocol for both client and server
     6 
     7 // *Action: Administrator should set SQLNET_ALLOWED_LOGON_VERSION parameter
     8 
     9 //          on both client and servers to values that matches the minimum
    10 
    11 //          version supported in the system.
    12 
    13 [oracle@orcltest ~]$
    14 
    15 12c下:
    16 
    17  oerr ora 28040
    18 
    19 28040, 0000, "No matching authentication protocol"
    20 
    21 // *Cause:  There was no acceptable authentication protocol for
    22 
    23 //          either client or server.
    24 
    25 // *Action: The administrator should set the values of the
    26 
    27 //          SQLNET.ALLOWED_LOGON_VERSION_SERVER and
    28 
    29 //          SQLNET.ALLOWED_LOGON_VERSION_CLIENT parameters, on both the
    30 
    31 //          client and on the server, to values that match the minimum
    32 
    33 //          version software supported in the system.
    34 
    35 //          This error is also raised when the client is authenticating to
    36 
    37 //          a user account which was created without a verifier suitable for
    38 
    39 //          the client software version. In this situation, that account's
    40 
    41 //          password must be reset, in order for the required verifier to
    42 
    43  
    复制代码

    可以看到,该参数在11g和12c下的解决方案是不同的。

    查询了一下参数SQLNET.ALLOWED_LOGON_VERSION,发现该参数在12c中以废弃,而是采用SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替。

    客户说是之前碰到了ORA-28040: No matching authentication protocol的错误才加上该参数的。

    解决:在Oracle用户(不是grid用户)下,将$ORACLE_HOME/network/admin/sqlnet.ora文件原来的SQLNET.ALLOWED_LOGON_VERSION=8注释掉(如果没有sqlnet.ora文件,那么就创建一个),修改为如下的行:

    1 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
    2 
    3 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

    不用重启数据库或者监听,也不用重启应用。

    区别如下:

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

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

    所以,该案例中主要起作用的是需要配置SQLNET.ALLOWED_LOGON_VERSION_SERVER。

    数据库的认证协议并不是数据库软件的版本, 对应的是dba_users.password_versions的值, 12.2 默认只支持11g 和12c的密码版本,如在11g中的密码版本10g和11g组合, 12c中密码版本是11g, 12c的组合,如果想使用10g的密码版本需要修改sqlnet.allowed_logon_version_server 到11或更低的值。

    sqlnet.allowed_logon_version_server 和sqlnet.allowed_logon_version_client配置的值是最小认证版本的值,如数据库是12c, sqlnet.allowed_logon_version_server=10, 那10g,11g,12c的client都可以访问,包含10g对应的JDBC驱动包。 sqlnet.allowed_logon_version_server是配置在数据库服务器(被访问端)的DB $ORACLE_HOME的sqlnet.ora(不是GI HOME),在12.2版本有效值应该是8,9,10,11,12,12A,

    特别需要注意:

    (1)如果是RAC,因为RAC是使用grid的监听器,因此很多人以为是在“/u02/app/12.1.0/grid/network/admin/sqlnet.ora” 加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”,其实这是错的,而是仍然在$ORACLE_HOME/network/admin/sqlnet.ora加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”

    (2)上面所说的版本,是指dba_users.password_versions的版本。

    在Oracle 12c中,虽然在sqlnet.ora加SQLNET.ALLOWED_LOGON_VERSION=8可以解决问题,但由于这个参数在12c已经废弃了,而是用SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替。如果继续使用该

    另外,对于JDBC的报错也可以下载支持oracle12c的jdbc驱动jar包。链接:http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html

    注:本地jdk版本为1.6,则下载ojdbc6.jar;jdk版本为1.7,则下载ojdbc7.jar

    如下图所示:

    也可以在在ORACLE安装目录lib库目录下载ojdbc7.jar包,然后把这个ojdbc7.jar加载到开发环境中。

    复制代码
     1 [oracle@orcltest dbhome_1]$ ll $ORACLE_HOME/jdbc/lib/ojdbc*
     2 
     3 -rw-r--r-- 1 oracle oinstall 3447295 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5dms_g.jar
     4 
     5 -rw-r--r-- 1 oracle oinstall 2617019 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5dms.jar
     6 
     7 -rw-r--r-- 1 oracle oinstall 3425922 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5_g.jar
     8 
     9 -rw-r--r-- 1 oracle oinstall 2095661 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc5.jar
    10 
    11 -rw-r--r-- 1 oracle oinstall 4486070 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6dms_g.jar
    12 
    13 -rw-r--r-- 1 oracle oinstall 3327656 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6dms.jar
    14 
    15 -rw-r--r-- 1 oracle oinstall 4462913 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6_g.jar
    16 
    17 -rw-r--r-- 1 oracle oinstall 2714016 Aug 23  2011 /u02/app/oracle/product/11.2.0/dbhome_1/jdbc/lib/ojdbc6.jar
    18 
    19 [oracle@orcltest dbhome_1]$
    复制代码

    1.3.4  官方文档及MOS的解释 

    http://docs.oracle.com/database/121/UPGRD/deprecated.htm#UPGRD60010

  • 相关阅读:
    [译]为什么你要学Go?
    类Lisp解释器JavaScript实现
    前端同学Windows中生存指北
    Virtualbox
    数据发布和上线日报&周报系统开发总结
    [Lab1]五分钟了解Makefile
    解决linux下解压来自windows的zip文件产生乱码的问题
    Arch使用过程中出现的问题汇总
    jQuery为什么移除了.toggle()方法
    Linux配置DNS
  • 原文地址:https://www.cnblogs.com/shujuyr/p/13111642.html
Copyright © 2020-2023  润新知