历史信息查看请查看个人网页www.zhaibibei.cn 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注


这个专题讲一些日常运维的异常处理


1. 现象

公司新架设一套Oracle 12c的数据库,使用Oracle 11g客户端连接的时候报错

版本为12.2.0.1.181016(最新)

ORA-28040: No matching authentication protocol
1_3.png

2. 原因查找

首先通过oerr查找该错的具体内容

2_3.png

这里提示需要设置如下参数

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER
  • SQLNET.ALLOWED_LOGON_VERSION_CLIENT

SQLNET.ALLOWED_LOGON_VERSION_SERVER

我们这里搜索官方文档查看相关的内容

该参数设置连接到数据库实例的最小认证协议版本

这里的version指的是认证协议的版本,不是数据库的

该参数设置为12a将支持oracle12c的密码版本

我们可以通过查看dba_users的 password_versions字段

3.png

我们可以设置该参数为8来允许密码版本为10G, 11G, 和 12C的用户


3. 问题解决

在数据库sqlnet.ora中加入如下参数:

SQLNET.ALLOWED_LOGON_VERSION_SERVER =11
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=11

CLIENT参数用于数据库作为客户端使用时使用

如通过DBLINK连接到一个Oracle 10g的服务器


4.其他

  • 如果环境中有Oracle 10g及以下的数据库,需要设置为相应的版本
 10 for 10g
 9 for 9i
 8 for 8i
  • 建议服务器端客户端都设置

  • 设置SEC_CASE_SENSITIVE_LOGON=FALSE后需要修改密码(如设置成12则该参数无效)

  • RAC环境中应设置$ORACLE_HOME下的sqlnet.ora,而不是$GRID_HOME
  • 该参数从12.2开始默认值为12

5.参考链接

https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2016