使用非cx_Oracle验证Oracle用户名/密码的Python方法

2 投票
3 回答
2736 浏览
提问于 2025-04-16 15:12

我需要确认用户提供的Oracle账户信息是否正确。我尝试使用cx_Oracle这个工具,但我服务器上的OCI.DLL版本(我无法升级)似乎和cx_Oracle不兼容。

我该如何在不使用cx_Oracle的情况下验证用户名和密码呢?

3 个回答

1

这个问题很可能是因为你安装的cx_Oracle模块版本不对。

在安装这个模块的时候,你需要非常小心,确保选择和你安装的Oracle数据库相匹配的版本。

http://cx-oracle.sourceforge.net/

如果你无法通过cx_Oracle连接到数据库,那么你可能会很难检查信息的准确性。

如果你安装了sql*plus,可以尝试用subprocess模块启动一个进程,看看能否连接上,但我觉得修复cx_Oracle可能更有效。

编辑:这里指的是subprocess模块。

下面是如何使用subprocess模块的方法:

import subprocess

def is_login_valid(user, password, instance):
  output = subprocess.check_output("sqlplus %s/%s@%s" %(user, password, instance))
  return (output.find("ORA-01017") == -1 and output.find("ORA-12154") == -1)
1

如果你通过其他方式获得了用户名和密码的哈希值,而不需要用到cx_Oracle,只是想验证这些密码的哈希值,那么可以试试Passlib这个Python库。它支持两种哈希格式:oracle10goracle11g

3

如果你无法编译 cx_Oracle,有两个选择:

  • 使用 ODBC(比如 PyODBC);
  • 使用 subprocess 来和 sqlplus 进行交互。

撰写回答