【问题标题】:Cx_Oracle : DatabaseError: ORA-28040: No matching authentication protocolCx_Oracle : DatabaseError: ORA-28040: 没有匹配的身份验证协议
【发布时间】:2021-01-03 04:29:52
【问题描述】:

我在 python 环境中使用 Cx_Oracle 包时遇到了这个错误。我从 11g 升级到 oracle 12c,但它仍然给我这个错误。另外,我正在使用 ojdbc6.jar。

DatabaseError: ORA-28040: 没有匹配的身份验证协议

【问题讨论】:

    标签: python oracle12c cx-oracle


    【解决方案1】:

    从 12c 开始,支持的最低版本默认值已从 11 更改为 12,SQLNET.ALLOWED_LOGON_VERSION 现在已替换为 SQLNET.ALLOWED_LOGON_VERSION_SERVERSQLNET.ALLOWED_LOGON_VERSION_CLIENT 参数

    您需要在您的 sqlnet.ora 文件中添加这两个参数,您可以在以下位置找到该文件 ORACLE_HOME/network/admin/

    更改后,不要忘记使用lsnrctl reload重新加载监听器

    更多信息请见Oracle Official Doc

    【讨论】:

      【解决方案2】:

      这对我使用 cx-Oracle 8.0.1 有帮助

      添加sqlnet.ora

      SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
      

      错误消失了,但我得到了

      ORA-01017: Invalid Username/Password
      

      解决方法更改密码

      alter user UUUUU identified by PWD; 
      

      在此之后,用户 PASSWORD_VERSIONS 被设置为从 10 到 12,一切正常很好

      select PASSWORD_VERSIONS  from dba_users where username = 'UUUUU';
      
      PASSWORD_VERSIONS
      -----------------
      10G 11G 12C 
      

      【讨论】:

        【解决方案3】:

        ojdbc6.jar 是 JVM/Java 的驱动程序

        Cx_Oracle 是依赖于 libclnth.so 库的 C/C++ 库。

        错误表明您的客户端太旧(或太新)并且您无法对数据库进行身份验证。没有双方都实现/接受的认证协议。

        您应该升级您的客户端或更改 sqlnet.ora 将SQLNET.ALLOWED_LOGON_VERSION 设置为客户端库的版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2018-02-16
          • 2021-08-29
          • 2016-03-02
          • 2019-07-05
          • 1970-01-01
          相关资源
          最近更新 更多