本篇内容主要讲解“怎么解决Oracle低版本客户端连接报ORA-28040和ORA-01017错误”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决Oracle低版本客户端连接报ORA-28040和ORA-01017错误”吧!

Oracle 11g 的生命周期已经 ,18c 也已经正式发布,那么在安装Oracle 18c 之后,如果已低版本的客户端来连接18c ,就会报如下两个错误:

ORA-28040:NomatchingauthenticationprotocolORA-01017:invalidusername/password;logondenied

他们会先后出现,当解决ORA-28040错误后,就会出现ORA-01017错误。 这里重现一下错误并提供解决方法。

1. 问题重现

数据库服务端版本:

[oracle@www.cndba.cndbs]$sqlplus/assysdbaSQL*Plus:Release18.0.0.0.0-ProductiononMonAug2706:42:492018Version18.3.0.0.0Copyright(c)1982,2018,Oracle.Allrightsreserved.Connectedto:OracleDatabase18cEnterpriseEditionRelease18.0.0.0.0-ProductionVersion18.3.0.0.0

客户端11.2.0.4,连接正常:

C:/Users/Dave>sqlplussystem/oracle@192.168.56.168:1522/daveSQL*Plus:Release11.2.0.4.0ProductiononFriAug3109:24:532018Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase18cEnterpriseEditionRelease18.0.0.0.0-ProductionSQL>

但是11.2.0.1不行:

D:/instantclient_11>sqlplussystem/oracle@192.168.56.168:1522/daveSQL*Plus:Release11.2.0.1.0Productionon星期五8月3110:51:522018Copyright(c)1982,2010,Oracle.Allrightsreserved.ERROR:ORA-28040:Nomatchingauthenticationprotocol2. 处理ORA-28040错误

根据MOS文档 (ID 755605.1),ORA-28040的错误需要在Oracle 用户(非grid用户)的sqlnet.ora 文件中添加:
SQLNET.ALLOWED_LOGON_VERSION=8
或者使用更高版本的客户端。

但实际上,根据MOS文档(ID 2111876.1), 在Oracle 12c 以后的版本,
SQLNET.ALLOWED_LOGON_VERSION 参数已经弃用了,应该使用以下2个参数代替:
SQLNET.ALLOWED_LOGON_VERSION_SERVER = n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = n

这里的n默认为11. 第一个参数是客户端连接到服务器的时候启作用,第二个是做为客户端去连接其它数据库的时候启作用。例如创建db link。

其他可选值如下:



12afor Oracle Database 12c Release 1 (12.1) release 12.1.0.2 or later12for the critical patch updates CPUOct2012 and later Oracle Database 11g authentication protocols (recommended)11for Oracle Database 11g authentication protocols (default)10for Oracle Database 10g authentication protocols8for Oracle8i authentication protocol

这里修改如下:

[oracle@www.cndba.cnadmin]$catsqlnet.ora#sqlnet.oraNetworkConfigurationFile:/u01/app/oracle/product/18.3.0/db_1/network/admin/sqlnet.ora#GeneratedbyOracleconfigurationtools.NAMES.DIRECTORY_PATH=(TNSNAMES,EZCONNECT)SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8SQLNET.ALLOWED_LOGON_VERSION_SERVER=8[oracle@www.cndba.cnadmin]$

修改后即可生效,在连接报错如下:

C:/Users/Dave>sqlplussystem/oracle@192.168.56.168:1522/daveSQL*Plus:Release11.2.0.1.0Productionon星期五8月3114:49:532018Copyright(c)1982,2010,Oracle.Allrightsreserved.ERROR:ORA-01017:invalidusername/password;logondenied3. 处理ORA-01017错误

从错误提示看是用户名或者密码错误,实际上这里用户名和密码没有问题。 这里的问题是我们配置的sqlnet对之前已经存在的帐号并没有生效,他们还保持在之前的兼容性。

SQL>setpages100SQL>selectusername,password_versionsfromdba_users;USERNAMEPASSWORD_VERSIONS----------------------------------------------------------------SYS11G12CSYSTEM11G12COUTLN11G12CSYS$UMF11G12CDBSNMP11G12CAPPQOSSYS11G12CDBSFWUSER11G12CGGSYS11G12C

这里的解决方法就是对用户修改下密码:

SQL>alterusersysidentifiedbyoracle;Useraltered.SQL>alterusersystemidentifiedbyoracle;Useraltered.

查看密码版本:

SQL>selectusername,password_versionsfromdba_users;USERNAMEPASSWORD_VERSIONS----------------------------------------------------------------SYS11G12CSYSTEM10G11G12C

注意这里虽然SYS并没有改变,但是SYSTEM的版本已经加上了10G。 实际上,现在这2个用户都可以连接了:

C:/Users/Dave>sqlplussystem/oracle@192.168.56.168:1522/daveSQL*Plus:Release11.2.0.1.0Productionon星期五8月3114:58:352018Copyright(c)1982,2010,Oracle.Allrightsreserved.连接到:OracleDatabase18cEnterpriseEditionRelease18.0.0.0.0-ProductionSQL>C:/Users/Dave>sqlplussys/oracle@192.168.56.168:1522/daveassysdbaSQL*Plus:Release11.2.0.1.0Productionon星期五8月3114:58:542018Copyright(c)1982,2010,Oracle.Allrightsreserved.连接到:OracleDatabase18cEnterpriseEditionRelease18.0.0.0.0-ProductionSQL>

到此,相信大家对“怎么解决Oracle低版本客户端连接报ORA-28040和ORA-01017错误”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!