低版本客户端连接高版本数据库报错ORA-28040、ORA-01017
测试环境:
- 客户端: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的更多相关文章
- 高版本->低版本迁移,低版本客户端连接高版本数据库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,若 ...
- Java客户端连接kafka集群报错
往kafka集群发送消息时,报错如下: page_visits-1: 30005 ms has passed since batch creation plus linger time 加入log4j ...
- 如何让VMware低版本运行VMware高版本创建的虚拟机
如何让VMware低版本运行VMware高版本创建的虚拟机 问题描述: 本机安装的VMware Workstation是10版本,之前VMware Workstation 11版本创建的虚拟机,在运行 ...
- CMake版本低,需要更高版本.
https://blog.csdn.net/qq_34935373/article/details/90266958 使用cmake命令安装Opencv软件时,报如下错误: CMake Error a ...
- 低版本Flume兼容高版本elasticsearch
Flume更新比较慢,而elasticsearch更新非常快所以当涉及更换elasticsearch版本时会出现不兼容问题. apache-flume-1.6.0+elasticsearch1.5.1 ...
- 技巧:低版本VS打开高版本VS创建的工程
错误一:当用低版本VS打开高版本VS创建的工程时,会出现: 方案:将该工程的解决方案文件的后缀由xxx.sln改成了xxx.txt然后,查看其内容如下: Microsoft Visual Studio ...
- Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时
Oracle 客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时 排错步骤: 1. 查看网络是否畅通: 打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...
- .NET中低版本程序调用高版本DLL
在.NET项目开发中,有时需要对旧的程序进行二次开发,但是有些DLL是高版本的,如果对旧程序升级高版本,则需要改动的地方比较多,在项目比较急,开发时间短的情况下,可以通过下面方法让低版本程序调用高版本 ...
- 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 ...
- dbstart和dbshut启动、关闭数据库报错ORACLE_HOME_LISTNER is not SET解决办法
dbstart启动数据库报错,如下: [oracle@wen ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracl ...
随机推荐
- jmeter中获取token和cookie
## 登录获取token 1.添加请求 1.1 输入接口中需要携带的参数的值 2.正则表达式提取器提取出值 3.输入token数据 "token":"(.+?)" ...
- python爬虫下载小说
1. from urllib.request import urlopen from urllib import request from bs4 import BeautifulSoup from ...
- C语言/python实现定时关机
1.python def shutdown(): print('(1)定时关机\n(2)取消定时关机\n(3)立即关机\n(4)关机重启') b = eval(input('请选择:\n')) if( ...
- 二、docker安装
一.docker安装 Docker 是管理容器的工具, Docker 不等于 容器. 1.1.docker yum源设置 #step 1 download docker-ce.repo file [r ...
- PyGame做了一个扫雷
1 # 这是一个示例 Python 脚本. 2 3 # 按 ⌃R 执行或将其替换为您的代码. 4 # 按 双击 ⇧ 在所有地方搜索类.文件.工具窗口.操作和设置. 5 import sys 6 imp ...
- Python基础部分:8、for循环和range的使用
目录 一.while循环补充说明 1.死循环 2.嵌套及全局标志位 二.for...循环 1.for...循环特点 2.for...循环语法结构 三.range方法 1.什么是range 2.不同版本 ...
- VP记录
预计在最后的日子里适量VP 简单记录一下 CF 1037 Link 上来秒了ABCD,很快啊 A是二进制拆分,B是一眼贪心,C是一个非常简单且好写的dp D把边遍历顺序按照所需的bfs顺序排序,最后比 ...
- 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)
小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...
- 记一次HTTPClient模拟登录获取Cookie的开发历程
记一次HTTPClient模拟登录获取Cookie的开发历程 环境: springboot : 2.7 jdk: 1.8 httpClient : 4.5.13 设计方案 通过新建一个 ...
- ui自动化测试数据复原遇到的坑——2、python连接informix时pytest报致命错误Windows fatal exception: access violation
python连接informix只能通过jdbc(需要先部署java环境.我试过到IBM上下载ODBC但结局是失败的),在执行pytest时发现有一串报错(大致是下面的这样): Windows fat ...