问题现象:
如使用Oracle11.2客户端连接Oracle 19c的时候,报错:
ORA-28040: No matching authentication protocol
ORA-28040: 没有匹配的验证协议
问题原因:
原因客户端与服务器段的密码生成版本(dba_users.password_versions)不一致导致
SQLNET.ALLOWED_LOGON_VERSION_SERVER Setting | 8 | 11 | 12 | 12a |
---|---|---|---|---|
Server runs in Exclusive Mode | No | No | Yes | Yes |
Generate the | Yes | Yes | No | No |
Generate the | Yes | Yes | Yes | No |
Generate the | Yes | Yes | Yes | Yes |
解决方法:
在数据库服务器上的$ORACLE_HOME/network/admin/sqlnet.ora文件添加相应参数
注:单实例或RAC都是此目录的sqlnet.ora文件
Oracle12c以下版本
SQLNET.ALLOWED_LOGON_VERSION=##
Oracle12c及以上版本
SQLNET.ALLOWED_LOGON_VERSION_SERVER=##
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=##
两者区别
SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以连接到12c数据库的客户端版本(client -->12c server )
SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c数据库可以连到哪些版本的数据库(12c server -->其它版本dbserver),例如:控制通过DB LINK可连接到哪些版本的oracle库。
添加参数以后无需重启数据库或监听,但需要重置数据库用户密码,否则会报错
ORA-01017: 用户名/口令无效; 登录被拒绝
在数据库服务器使用sys登录并修改密码
修改完数据库用户密码后再重新登录,搞定