【发布时间】:2021-01-03 04:29:52
【问题描述】:
我在 python 环境中使用 Cx_Oracle 包时遇到了这个错误。我从 11g 升级到 oracle 12c,但它仍然给我这个错误。另外,我正在使用 ojdbc6.jar。
DatabaseError: ORA-28040: 没有匹配的身份验证协议
【问题讨论】:
标签: python oracle12c cx-oracle
我在 python 环境中使用 Cx_Oracle 包时遇到了这个错误。我从 11g 升级到 oracle 12c,但它仍然给我这个错误。另外,我正在使用 ojdbc6.jar。
DatabaseError: ORA-28040: 没有匹配的身份验证协议
【问题讨论】:
标签: python oracle12c cx-oracle
从 12c 开始,支持的最低版本默认值已从 11 更改为 12,SQLNET.ALLOWED_LOGON_VERSION 现在已替换为 SQLNET.ALLOWED_LOGON_VERSION_SERVER 和 SQLNET.ALLOWED_LOGON_VERSION_CLIENT 参数
您需要在您的 sqlnet.ora 文件中添加这两个参数,您可以在以下位置找到该文件
ORACLE_HOME/network/admin/
更改后,不要忘记使用lsnrctl reload重新加载监听器
更多信息请见Oracle Official Doc
【讨论】:
这对我使用 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
【讨论】:
ojdbc6.jar 是 JVM/Java 的驱动程序
Cx_Oracle 是依赖于 libclnth.so 库的 C/C++ 库。
错误表明您的客户端太旧(或太新)并且您无法对数据库进行身份验证。没有双方都实现/接受的认证协议。
您应该升级您的客户端或更改
sqlnet.ora 将SQLNET.ALLOWED_LOGON_VERSION 设置为客户端库的版本。
【讨论】: