测试环境:

  • 客户端:Oracle 11.2.0.1
  • 服务端:Oracle 19.16

测试过程:

1.低版本客户端连接高版本数据库报错ORA-28040

使用oracle 11.2.0.1 的客户端,对19c的服务端进行连接时,报错:ORA-28040: No matching authentication protocol

C:\Users\Alfred>sqlplus sys/oracle@192.168.1.4/demo as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 17 17:52:30 2023

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-28040: No matching authentication protocol

这个错误其实我在给客户做经验分享类的交流时,反复讲过,解决起来也很简单,同时也有MOS文档 2296947.1 依据:

  • 12.2: ORA-28040 Followed by ORA-1017 When Client is Under Version 12. (Doc ID 2296947.1)

如果在不方便升级客户端的情况下,只能在服务端,配置sqlnet.ora文件:

[oracle@bogon admin]$ pwd
/u01/app/oracle/product/19.3.0/db_1/network/admin
[oracle@bogon admin]$ cat sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

非常简单,且不用重启任何服务,不用重载监听,即可生效;

再次连接,不再报错ORA-28040。

2.低版本客户端连接高版本数据库报错ORA-01017

不再报错ORA-28040,但开始报错:ORA-01017: invalid username/password; logon denied

C:\Users\Alfred>sqlplus sys/oracle@192.168.1.4/demo as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 17 21:17:09 2023

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied 请输入用户名:

可是输入的密码确认是没问题的,使用高版本的客户端,同样的密码测试连接也是OK的。

那是什么问题呢?想到是密码版本问题,根据MOS 文档 2040705.1:

  • Lockout of all database authenticated users getting error ORA-01017: invalid username/password; logon denied (Doc ID 2040705.1)

When you inspect the DBA_USERS.PASSWORD_VERSIONS you only see 11G and 12C values but not 10G.

查询用户的PASSWORD_VERSIONS:

SQL> select username, password_versions from dba_users where password_versions is not null;

USERNAME		       PASSWORD_VERSIONS
------------------------------ -----------------
SYS 11G 12C
SYSTEM 11G 12C
CTXSYS 11G 12C

With this solution you will also need to change the user password again so the DBA_USERS.PASSWORD_VERSIONS will get a 10G value, however the DES based verifiers are outdated and should only be used in exceptional cases when legacy client applications still need it.

alter user sys identified by oracle;

再次,尝试从11.2.0.1的客户端,对19c的服务端进行连接时,可以成功连接:

C:\Users\Alfred>sqlplus sys/oracle@192.168.1.4/demo as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 17 21:57:33 2023

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production SQL> exit
从 Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 断开 C:\Users\Alfred>

但是有个疑问,这里再次改过SYS密码后,查询PASSWORD_VERSIONS其实还是没有显示出来:

SQL> select username, password_versions from dba_users where password_versions is not null;

USERNAME		       PASSWORD_VERSIONS
------------------------------ -----------------
SYS 11G 12C
SYSTEM 11G 12C
CTXSYS 11G 12C

考虑到SYS用户的特殊性,那么这里使用SYSTEM用户再次测试观察下:

sqlplus system/oracle@192.168.1.4/demo

同样,报错ORA-01017,输入的密码确认是没问题的,使用高版本的客户端,同样的密码测试连接也是OK的。

C:\Users\Alfred>sqlplus system/oracle@192.168.1.4/demo

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 17 22:10:02 2023

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied 请输入用户名:
C:\Users\Alfred>

修改system密码:

SQL> select username, PASSWORD_VERSIONS, PASSWORD_CHANGE_DATE from dba_users where PASSWORD_VERSIONS is not null;

USERNAME		       PASSWORD_VERSIONS PASSWORD_
------------------------------ ----------------- ---------
SYS 11G 12C 04-JAN-23
SYSTEM 11G 12C 04-JAN-23
CTXSYS 11G 12C 04-JAN-23 SQL> alter user system identified by oracle; User altered. SQL> select username, PASSWORD_VERSIONS, PASSWORD_CHANGE_DATE from dba_users where PASSWORD_VERSIONS is not null; USERNAME PASSWORD_VERSIONS PASSWORD_
------------------------------ ----------------- ---------
SYS 11G 12C 04-JAN-23
SYSTEM 10G 11G 12C 17-JAN-23
CTXSYS 11G 12C 04-JAN-23 SQL>

看来,SYSTEM用户是比较正常显示的,改过密码后,PASSWORD_VERSIONS多了10G的显示,符合我们预期。

此时,再尝试从11.2.0.1的客户端,对19c的服务端进行连接时,确认system用户也可以成功连接了:

C:\Users\Alfred>sqlplus system/oracle@192.168.1.4/demo

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 1月 17 22:15:23 2023

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production SQL>

其他业务用户,推断应该都和system用户的表现一致,这样也符合逻辑。

这里还观察到一个细节:

修改密码前,查询SYS和SYSTEM用户在user$中的password和spare4字段:

select name, password, spare4 from user$ where name in ('SYS','SYSTEM')
SQL> / NAME PASSWORD SPARE4
--------------- --------------- --------------------------------------------------------------------------------
SYS S:88EB5B08A9EC6EBAE68148FB711CF9416C26077B3512B6A5BF8A1F44C610;T:4EDCFBAD9376CD1
ACEBA5567ECA2877B386ED292DD993B57CEEC07261A0137141A5C43941265FC7FD7A540D9D3EED87
1B6EB1733EEBC2AED5A63CF02F69AFEBC89F026B2D4430CE35D6CCCD5C5DA7123 SYSTEM S:9CFB5871B12A3CF7E01D864BFE348D521B15B78DEF75B8C95C0EC661792B;T:52418514B24923B
6C1CC3A609B293A413C5B71C5B2A270A97A71F5E2A2857CFCAE98ECE47B17A1149BAAFF268654082
469B1078901B0B55CFD377987E2C5AFC598045FFCE551D42CBDE2D38418BDFBE6

修改密码后,再次查询:

SQL> select name, password, spare4 from user$ where name in ('SYS','SYSTEM') ;

NAME		PASSWORD	SPARE4
--------------- --------------- --------------------------------------------------------------------------------
SYS S:88EB5B08A9EC6EBAE68148FB711CF9416C26077B3512B6A5BF8A1F44C610;T:4EDCFBAD9376CD1
ACEBA5567ECA2877B386ED292DD993B57CEEC07261A0137141A5C43941265FC7FD7A540D9D3EED87
1B6EB1733EEBC2AED5A63CF02F69AFEBC89F026B2D4430CE35D6CCCD5C5DA7123 SYSTEM 2D594E86F93B17A S:CAA7AFAE43C3D06D50F6272A837ACDF4C3A2D092821AD7076534CCEEE6F7;T:B8FCFE4B975D3D9
1 86C1CD27A21FB6F78397BD97889B017FE2F6B949981E85E5F1208C42A143367C3EA70AF7B39B6193
C38D171CEEF893EAF6FB87A5C095F864B6517CEA65522ACCDE592D9A645FEDC3A

发现SYS用户在基表user$中也是没有变化,但是SYSTEM用户就比较正常了,而且会发现,SYSTEM用户在PASSWORD字段也有对应值了,这是因为PASSWORD_VERSIONS=10G版本时,是存在这个字段的。

3.总结经验

最后总结一下:

  • 1.低版本客户端连接高版本数据库,需要在服务端配置sqlnet.ora文件;
  • 2.高版本数据库的密码需要重新设置(可以和之前密码相同),确保PASSWORD_VERSIONS有低版本;
  • 3.不同PASSWORD_VERSIONS,在基表user$中存储密码的列也不一样;
  • 4.测试做实验强烈建议不要使用SYS这种特殊用户,因为现象很可能不一致;建议使用SYSTEM或者最好自己新建测试用户为佳。

低版本客户端连接高版本数据库报错ORA-28040、ORA-01017的更多相关文章

  1. 高版本->低版本迁移,低版本客户端连接高版本数据库EXP导出报错EXP-00008,ORA-01455,EXP-00000

    生产环境: 源数据库:RHEL + Oracle 11.2.0.3 目标数据库:HP-UX + Oracle 10.2.0.4   需求:迁移部分表  11.2.0.3-->10.2.0.4,若 ...

  2. Java客户端连接kafka集群报错

    往kafka集群发送消息时,报错如下: page_visits-1: 30005 ms has passed since batch creation plus linger time 加入log4j ...

  3. 如何让VMware低版本运行VMware高版本创建的虚拟机

    如何让VMware低版本运行VMware高版本创建的虚拟机 问题描述: 本机安装的VMware Workstation是10版本,之前VMware Workstation 11版本创建的虚拟机,在运行 ...

  4. CMake版本低,需要更高版本.

    https://blog.csdn.net/qq_34935373/article/details/90266958 使用cmake命令安装Opencv软件时,报如下错误: CMake Error a ...

  5. 低版本Flume兼容高版本elasticsearch

    Flume更新比较慢,而elasticsearch更新非常快所以当涉及更换elasticsearch版本时会出现不兼容问题. apache-flume-1.6.0+elasticsearch1.5.1 ...

  6. 技巧:低版本VS打开高版本VS创建的工程

    错误一:当用低版本VS打开高版本VS创建的工程时,会出现: 方案:将该工程的解决方案文件的后缀由xxx.sln改成了xxx.txt然后,查看其内容如下: Microsoft Visual Studio ...

  7. Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时

    Oracle 客户端连接Oracle数据库报错   ORA-12170:TNS:连接超时  排错步骤: 1. 查看网络是否畅通:  打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...

  8. .NET中低版本程序调用高版本DLL

    在.NET项目开发中,有时需要对旧的程序进行二次开发,但是有些DLL是高版本的,如果对旧程序升级高版本,则需要改动的地方比较多,在项目比较急,开发时间短的情况下,可以通过下面方法让低版本程序调用高版本 ...

  9. navicat连接远程数据库报错'client does not support authentication protocol requested by server consider ...'解决方案

    [1.cmd终端连接远程mysql数据库方法] mysql -uhello -pworld   -h192.168.1.88 -P3306 -Dmysql_oa mysql -u用户名 -p密码 -h ...

  10. dbstart和dbshut启动、关闭数据库报错ORACLE_HOME_LISTNER is not SET解决办法

    dbstart启动数据库报错,如下: [oracle@wen ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracl ...

随机推荐

  1. 动词时态=>3.现在时态和过去时态构成详解

    现在时态构成详解 一般现在时态 最容易构成的时态,直接加动词原形(字典当中显示的词条)就可以 第三人称"单数"的话需要加s 这是最容易出错的时态:容易将 现在的时间,和一般的状态: ...

  2. golang的内存管理

    0.1.索引 https://blog.waterflow.link/articles/1663406367769 1.内存管理 内存管理是管理计算机内存的过程,在主存和磁盘之间移动进程以提高系统的整 ...

  3. CJK备注

    pip清华镜像库 :pip install XXX -i https://pypi.tuna.tsinghua.edu.cn/simple pip阿里巴巴镜像库:pip install XXX -i ...

  4. python django搭建一个简易博客的解析(按照文件顺序逐一讲解)

    上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版. 源代码请在http://github/Cheng0829/mysite自行下载 mysite: db.sqlite3:数据库文件. ...

  5. JAVA-注解之 TODO、FIXME、XXX

    TODO.FIXME.XXX    //TODO : 表示待实现的功能    //FIXME: 代码存在Bug,不能Run或运行结果不正确,需要修复    //XXX  : 勉强可以工作,但是实现的方 ...

  6. 第2-2-4章 常见组件与中台化-常用组件服务介绍-分布式ID-附Snowflake雪花算法的代码实现

    目录 2.3 分布式ID 2.3.1 功能概述 2.3.2 应用场景 2.3.3 使用说明 2.3.4 项目截图 2.3.5 Snowflake雪花算法的代码实现 2.3 分布式ID 2.3.1 功能 ...

  7. 【题解】CF1013B And

    题面传送门 解决思路 首先我们可以得出,$ a $ \(\&\) $ x $ \(=\) $ a $ \(\&\) $ x $ \(\&\) $ x $.由此得知,同一个 \( ...

  8. clickhouse在风控-风险洞察领域的探索与实践

    一.风险洞察平台介绍 以Clickhouse+Flink实时计算+智能算法为核心架构搭建的风险洞察平台, 建立了全面的.多层次的.立体的风险业务监控体系,已支撑欺诈风险.信用风险.企业风险.小微风险. ...

  9. Windows自带管理工具

    exe类notepad 记事本 control 控制面板 mstsc 远程桌面连接explorer 资源管理器 taskmgr 任务管理器resmon 资源监视器 perfmon 性能监视器reged ...

  10. 原来用 MySQL 也可以做全文检索

    我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 有朋友聊到他们的系统中要接入全 ...