EAS 部署在高版本数据库上BOS调试ORA-28040 错误原创
金蝶云社区-豹
4人赞赏了该文章 1,005次浏览 未经作者许可,禁止转载编辑于2022年01月13日 13:47:46

ORA-28040: No matching authentication protocol

原因是目前BOS对应的数据库连接工具类版本过低,需要修改数据库策略来匹配

我们遇到的问题是测试环境部署的Oracle 11g 版本,云端环境为Oracle 19c,然后使用BOS开发工具连接不上,无法调试。


一、ORA-28040: No matching authentication protocol解决方案

1.非云服务厂商RDS

在服务端/u01/app/oracle/product/18.3.0/dbhome_1/network/adminsqlnet.ora修改参数(对应自己的Oracle路径就可以了)

Oracle 12c 之前版本:

修改或添加参数(存在就修改,不存在就添加)

SQLNET.ALLOWED_LOGON_VERSION=8


Oracle 12c 开始后的版本:

修改或添加参数(存在就修改,不存在就添加)

--客户端连接到服务器的时候启作用

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

--做为客户端去连接其它数据库的时候启作用

SQLNET.ALLOWED_LOGON_VERSION_SERVE=8


然后reload监听,无需重启数据库

参考命令:

[oracle@host02 admin]$ pwd

/u01/app/oracle/product/18.3.0/dbhome_1/network/admin

[oracle@host02 admin]$ more  sqlnet.ora

#SQLNET.ALLOWED_LOGON_VERSION_SERVER=11

#SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10

SQLNET.ALLOWED_LOGON_VERSION=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

SQLNET.ALLOWED_LOGON_VERSION_SERVE=10

修改后使用reload 监听

[oracle@host02 admin]$ lsnrctl

LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 13-FEB-2019 15:56:45

Copyright (c) 1991, 2018, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> reload

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

The command completed successfull


2.云服务厂商RDS(以亚马逊云为例)

可直接在控制台修改对应参数值,无需做其他操作

image.png


以上修改完成后,可以试试BOS开发工具是否可以连接调试,如若不行,继续往下看



二、ORA-01017错误

如果不行应该就是出现这个错误了

从错误提示看是用户名或者密码错误,其实用户名和密码没有问题。 这里的问题是我们配置的sqlnet对之前已经存在的帐号并没有生效,他们还保持在之前的兼容性。


oracle密码版本写入的时候使用的时11g和12c配置的规则,导致正确密码也无法通过验证。

在sqlnet.ora文件新增了参数后密码虽然支持n(8)以上版本,但是此时由于密码规则事先写入,导致低版本客户端无法识别。

此时只需要alter user_name identified by passwd ;修改一遍即可了。


为了不影响正在运行的业务,一般就是把原来的用户名和密码执行一次,实际密码没有变,但是Oracle本身会重新匹配当前修改后的策略。


至此,解决完成此类问题。



赞 4