ORA-01005 vs ORA-28040

文章目录

  • (一)ORA-01005: 给出空密码 登录被拒绝
    • (1.1)解决
  • (二)ORA-28040: 没有匹配的验证协议
    • (2.1)解决

(一)ORA-01005: 给出空密码 登录被拒绝

在使用OJDBC 23(通过druid)连接某个Oracle实例的某个用户时,报错⚠️:

ORA-01005: null password given; logon denied

密码当然是给了的。
同时该实例(可能是Oracle19)其它用户连接正常。
上网查了一下,好些说需要换低版本驱动。

再查发现这个问题在10年前就有人问起。

继续查可以设置oracle.jdbc.thinLogonCapability=o3
似乎是服务端用户设置了什么安全方式,触发了ojdbc thin 驱动的一个古老问题。

(1.1)解决

  • 代码中添加System.setProperty("oracle.jdbc.thinLogonCapability","o3");
  • 或者回退驱动到 OJDBC 21

(二)ORA-28040: 没有匹配的验证协议

设置oracle.jdbc.thinLogonCapability=o3后,Oracle19那边正常了。
又偶然发现测试的Oracle12服务器,连接报错⚠️:

ORA-28040: No matching authentication protocol

同样密码是正确的,Toad等工具正常连接,连接Oracle11服务器正常。

(2.1)解决

  • 代码中删除System.setProperty("oracle.jdbc.thinLogonCapability","o3");。蛤?
  • 或者在%Oracle_Home\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora中添加:
    SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
    SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

你可能感兴趣的:(Windows,JAVA,数据库,Java,ojdbc,oracle19,oracle12,thin)