AWS Oracle RDS报ORA-28040错误如何配置SQLNET.ALLOWED_LOGON_VERSION参数
ORA-28040报错适配AWS Oracle RDS的解决方案
参数支持说明
AWS Oracle RDS支持配置兼容低版本认证协议的参数,但是无法直接修改实例底层的sqlnet.ora文件,需要通过RDS提供的自定义DB参数组能力完成配置。
注意Oracle 12c及以上版本已经将原SQLNET.ALLOWED_LOGON_VERSION参数拆分为服务端、客户端两个独立参数,你需要同时配置SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT两个参数值为8,才能兼容Java 8自带的旧版JDBC驱动的认证逻辑。
具体操作步骤
- 登录AWS RDS控制台,进入左侧菜单栏的「参数组」页面,创建新的自定义参数组,参数组家族选择与你现有Oracle 19c RDS实例匹配的版本,填写自定义的名称和描述后保存。
- 进入刚创建的自定义参数组详情页,分别搜索
SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT两个参数,将二者的值都修改为8,保存参数变更。 - 进入目标Oracle RDS实例的详情页,点击「修改」按钮,在「数据库选项」区域的「DB参数组」下拉框中,选择你刚创建的自定义参数组,保存修改时选择立即应用(该操作会触发RDS实例重启,请在业务低峰期执行)。
- 实例重启完成后,登录Oracle数据库,重置你用于业务连接的用户密码,触发数据库生成兼容低版本认证协议的密码哈希,执行SQL语句:
ALTER USER 你的业务用户名 IDENTIFIED BY 你的业务密码; - 回到同子网的EC2实例,运行Java 8客户端代码验证连接,即可解决ORA-28040报错。
无RDS配置变更的备选方案
如果你不想调整RDS实例的安全配置,可以直接升级Java项目的Oracle JDBC驱动版本到ojdbc8 19c及以上,新版驱动兼容Oracle 19c默认的高安全级认证协议,不需要修改任何RDS端配置即可正常连接。
内容的提问来源于stack exchange,提问作者Pavana karanth
相关产品推荐
相关产品推荐

