> 历史信息查看请查看个人网页www.zhaibibei.cn > 这是一个坚持Oracle,Python原创内容的公众号,欢迎关注 ------ 这个专题讲一些日常运维的异常处理 ------- ## 1. 现象 公司新架设一套Oracle 12c的数据库,使用Oracle 11g客户端连接的时候报错 版本为12.2.0.1.181016(最新) ``` ORA-28040: No matching authentication protocol ``` [image:419 size:orig] ------ ## 2. 原因查找 首先通过oerr查找该错的具体内容 [image:420 size:orig] 这里提示需要设置如下参数 - SQLNET.ALLOWED_LOGON_VERSION_SERVER - SQLNET.ALLOWED_LOGON_VERSION_CLIENT ------ **SQLNET.ALLOWED_LOGON_VERSION_SERVER** 我们这里搜索官方文档查看相关的内容 该参数设置连接到数据库实例的最小认证协议版本 这里的version指的是认证协议的版本,不是数据库的 该参数设置为12a将支持oracle12c的密码版本 我们可以通过查看dba_users的 password_versions字段 [image:421 size:orig] 我们可以设置该参数为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](https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2016)