ORA-28040: No matching authentication protocol 解决

某客户现场项目组通过4a连接的数据库,oracle客户端版本为9或者10,版本过低过低,而生存库的版本为12c

故通过客户端连接时报错ORA-28040: No matching authentication protocol


使用oerr命令来查看,在Oracle 11g下:

[oracle@orcltest ~]$ oerr ora 28040

28040, 0000, "No matching authentication protocol"

// *Cause: No acceptible authentication protocol for both client and server

// *Action: Administrator should set SQLNET_ALLOWED_LOGON_VERSION parameter

// on both client and servers to values that matches the minimum

// version supported in the system.

[oracle@orcltest ~]$

12c下:

oracle@HQsPSL-PSCV-R02:/oracle/app/oracle> oerr ora 28040

28040, 0000, "No matching authentication protocol"

// *Cause: There was no acceptable authentication protocol for

// either client or server.

// *Action: The administrator should set the values of the

// SQLNET.ALLOWED_LOGON_VERSION_SERVER and

// SQLNET.ALLOWED_LOGON_VERSION_CLIENT parameters, on both the

// client and on the server, to values that match the minimum

// version software supported in the system.

// This error is also raised when the client is authenticating to

// a user account which was created without a verifier suitable for

// the client software version. In this situation, that account's

// password must be reset, in order for the required verifier to


对症下药,可以看到,该参数在11g和12c下的解决方案是不同的。


查询了一下参数SQLNET.ALLOWED_LOGON_VERSION,发现该参数在12c中以废弃

而是采用SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SQLNET.ALLOWED_LOGON_VERSION_SERVER代替

值得注意在sqlnet.ora中增加SQLNET.ALLOWED_LOGON_VERSION_CLIENT和SERVER配置,不用重启数据库或者监听,也不用重启应用。


那么这两个参数分别代表什么意义呢,区别如下:

SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以连接到12c数据库的客户端版本(client --->orace 12c db )

SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c数据库可以连到哪些版本的数据库(orace 12c db --->其它版本的oracle db),例如:控制通过DB LINK可连接到哪些版本的oracle库。


所以,该案例中主要起作用的是需要配置SQLNET.ALLOWED_LOGON_VERSION_SERVER。

特别需要注意:


(1)如果是RAC,因为RAC是使用grid的监听器,因此很多人以为是在“/u01/app/12.1.0/grid/network/admin/sqlnet.ora” 加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”,其实这是错的,而是仍然在$ORACLE_HOME/network/admin/sqlnet.ora加“SQLNET.ALLOWED_LOGON_VERSION_SERVER=8”
注意是oracle用户下的sqlnet.ora修改,不是grid用户




### 解决Navicat连接Oracle 12C时报错ORA-28040的方法 当遇到`ORA-28040: No matching authentication protocol`错误时,这通常是因为客户端使用的安全认证协议与服务器端不匹配。对于Navicat连接到Oracle 12c的情况,可以采取以下措施来解决问题。 #### 修改SQLNET.ORA配置文件 为了使旧版客户端能够兼容新的Oracle 12c数据库,可以在数据库服务器上的 `$ORACLE_HOME/network/admin/sqlnet.ora` 文件中设置允许较早版本的身份验证协议[^3]: ```bash SQLNET.ALLOWED_LOGON_VERSION_SERVER=10 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10 ``` 上述参数设定使得服务器接受来自更低版本客户的请求,并且客户也采用较低的安全级别尝试建立会话。完成编辑后保存更改并重启监听器以及数据库实例以应用新设置。 #### 更新Navicat驱动程序 考虑到当前使用的Navicat版本可能并不完全支持最新的Oracle特性,建议检查是否有可用更新或考虑升级至更高版本的产品。新版软件往往包含了对更多类型数据源的支持及优化过的连接机制,有助于减少此类问题的发生概率[^2]。 #### 使用TNSNAMES.ORA定义服务名 另一种方式是在本地计算机上创建或修改 `tnsnames.ora` 来指定目标数据库的服务描述符。确保其中指定了正确的主机地址和服务名称,并通过这种方式建立连接而不是直接输入IP和SID/SERVICE_NAME组合。此方法有时能绕过某些特定环境下的认证差异带来的障碍[^4]。 ```plaintext MYDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = my_service_name) ) ) ``` 以上三种方案可以根据实际情况单独实施或者结合起来使用,从而有效处理因身份验证协议不符而导致的连接失败情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值