19c本地登录可以正常访问,如下:
[oracle@yxcache1 ~]$ sqlplus system/'******'@10.135.30.106:1521/filenet SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 13 17:48:15 2021 Version 19.8.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Thu May 13 2021 17:40:41 +08:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.8.0.0.0
复制
10g客户端登录19c数据库时出现报错,访问失败,如下:
[oracle@Pro-VM0936 backup]$ sqlplus 'system/"******"'@10.135.30.106:1521/filenet SQL*Plus: Release 10.2.0.5.0 - Production on Thu May 13 17:45:08 2021 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. ERROR: ORA-01017: invalid username/password; logon denied Enter user-name:
复制
查询用户相关信息:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 3 FILENET READ WRITE NO SQL> alter session set container=FILENET; Session altered. set lines 999 pages 999 col username for a20 select username,account_status,password_versions from dba_users where account_status='OPEN'; USERNAME ACCOUNT_STATUS PASSWORD_VERSIONS -------------------- -------------------------------- ----------------- SYS OPEN 11G 12C SYSTEM OPEN 11G 12C DBSNMP OPEN 11G 12C PDBADMIN OPEN 11G 12C FNGCD OPEN 10G FNOS00 OPEN 10G FNOS01 OPEN 10G
复制
这里介绍两个参数
SQLNET.ALLOWED_LOGON_VERSION_CLIENT SQLNET.ALLOWED_LOGON_VERSION_SERVER
复制
SQLNET.ALLOWED_LOGON_VERSION_CLIENT这个参数是12C新引进的参数。它表示Cp在向Sp发送认证(authentication)申请时,所使用的最低版本的认证协议。注意此处的认证协议版本并不等同于Oracle Database的版本。那不同的认证协议版本主要区别在哪儿呢?除了协议语义上的区别,在我看来,最重要的区别在于不同认证协议的版本对应着不同的database version,而不同的database version则可能使用不同的hash算法对密码进行加密。不同的hash算法就是不同的password_version,这个可以从dba_users字典表的password_versions字段中得到说明:
Shows the list of versions of the password hashes (also known as "verifiers") existing for the account. The PASSWORD_VERSIONS column value includes 10G if an old case-insensitive ORCL hash exists and 11G if a SHA-1 hash exists. Note that one or both of these verifiers can exist for any given account.
复制
Oracle在存储每个account的密码时,并非是明文存储,而是会将明文进行哈希加密存储,哈希加密算法即为该密码的version,即password_version。从上述说明可知,password_version实际上表示是同版本(并非完全一致,见最后的附表)的database 所提供的hash算法,例如password_version 10g就表示database 10g所提供的hash算法。如果Oracle所有的新版本都只使用新版本所特有的hash算法,那么一些较早的客户端因为还没有这些hash算法,就没法通过hash算法得到hash值,也就没法让服务器去验证这些hash值。为了解决兼容性的问题,Oracle会同时用多种hash算法(即password_version)对密码进行运算,并将多个运算结果均保留下来。在低版本客户端访问高版本的服务器时,低版本的客户端可以通报自己使用的认证协议以及使用该协议对应的hash算法所得到的密码hash值,服务器根据认证协议去查看是否存储了该协议对应的hash算法的hash值,如果存在,就比对两个hash值是否一致;如果不存在或两个hash值不一致,就报错。
随机做如下配置,并创建测试用户并测试连接:
[oracle@yxcache1 admin]$ cat sqlnet.ora SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
复制
create user test identified by test; SQL> grant create session to test; Grant succeeded. select username,account_status,password_versions from dba_users where account_status='OPEN'; USERNAME ACCOUNT_STATUS PASSWORD_VERSIONS -------------------- -------------------------------- ----------------- SYS OPEN 11G 12C SYSTEM OPEN 11G 12C DBSNMP OPEN 11G 12C PDBADMIN OPEN 11G 12C TEST OPEN 10G 11G 12C FNGCD OPEN 10G FNOS00 OPEN 10G FNOS01 OPEN 10G
复制
sqlplus test/test@10.135.30.106:1521/filenet [oracle@Pro-VM0936 admin]$ sqlplus test/test@10.135.30.106:1521/filenet SQL*Plus: Release 10.2.0.5.0 - Production on Thu May 13 17:59:44 2021 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
复制
发现登录成功。
参考:https://www.cnblogs.com/6yuhang/p/7600929.html