12C/19C Oracle连接提示ORA-28040 没有匹配的验证协议

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

12C/19C Oracle连接提示ORA-28040 没有匹配的验证协议

一、错误场景

数据库升级19C后客户端使用sqlplus、PL/SQl Developer等连接数据库提示

 ERROR:
ORA-28040: 没有匹配的验证协议

二、解决方法

方法1.升级instantclient的版本比如使用

instantclient-basic-windows.x64-19.3.0.0.0dbru-- x64 64位客户端
instantclient-basic-nt-19.12.0.0.0dbru; – x86 32位客户端
跟plsql developer没有关系的。

注意
1、plsql连接oracle数据库是通过instance-client作为连接驱动的跟plsql没关系
2、instance-client对Microsoft Visual C++有依赖
Instant Client 19.* 要求 Visual Studio 2015 - 2019 redistributable。
Instant Client 12.2 要求 Visual Studio 2013 redistributable。
Instant Client 12.1 要求 Visual Studio 2010 redistributable。
Instant Client 11.2 要求 Visual Studio 2005 redistributable。
3、plsql developer <-> instance-client <-> visual c++ 三者必须同时是32位或64位不能混用

方法2

步骤一Oracle 19c Server端进行配置$ORACLE_HOME/network/admin/sqlnet.ora 增加如下配置

$ vi sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
步骤二重建需要访问用户密码(使用旧密码即可、必须sqlplus登录修改)

$ sqlplus / as sysdba
SQL> alter user 用户名 identified by 密码;
SQL> select username,password_versions from dba_users where username = ‘C##USER1’
USERNAME PASSWORD_VERSIONS
C##USER1 10G 11G 12C复制
通过客户端工具再次登录成功

扩展

方案二 >> 步骤一中配置sqlnet.ora文件其实如果只是解决plsql客户端连接Oracle服务器问题只设置SQLNET.ALLOWED_LOGON_VERSION_SERVER=8即可。

SQLNET.ALLOWED_LOGON_VERSION_SERVER连接到 Oracle 数据库实例时允许的最低身份验证协议。
SQLNET.ALLOWED_LOGON_VERSION_CLIENT客户端允许的最小认证协议当服务器作为客户端连接Oracle数据库实例时例如数据库链。
这两个参数的默认值是12a

方案二 >> 步骤二中修改完sqlnet.ora的配置不修改相应用户密码直接用plsql9使用高版本客户端不会有问题原本就没问题访问Oracle 19c则会报另外一个错
ORA-01017用户名/密码错误
ORA-01017: invalid username/password; logon denied
这是因为SQLNET.ALLOWED_LOGON_VERSION_SERVE改为8只是参数变化并没有重建密码因此该account的实际password_versions仍然为11G,12C只有手动执行alter user后才会创建新的PASSWORD_VERSIONS10G 11G 12C

方案二 >> 步骤二中修改完sqlnet.ora的配置不能远程登录修改相应用户密码需在Oracle服务器上通过sqlplus工具进行修改。否则PASSWORD_VERSIONS不会重新生成。访问数据库时仍会报ORA-01017错误。

12c及以前版本Oracle数据库上可以配置如下参数SQLNET.ALLOWED_LOGON_VERSION=8。自12c起SQLNET.ALLOWED_LOGON_VERSION已经被弃用但是12c配置后仍有效

但是在19c上该参数彻底无效了。
所以Oracle 12c+版本请使用SQLNET.ALLOWED_LOGON_VERSION_SERVER、SQLNET.ALLOWED_LOGON_VERSION_CLIENT。

SQLNET.ALLOWED_LOGON_VERSION_SERVER配置的值指身份验证协议的版本而不是 Oracle 数据库版本。

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle