【发布时间】:2012-03-12 11:04:11
【问题描述】:
为了演示 Oracle 的安全功能,必须在用户会话尚未建立时调用 OCIServerVersion() 或 OCIServerRelease()。
虽然有数据库参数sec_return_server_release_banner = false。
我为此使用 Python cx_Oracle 模块,但我不确定如何在建立连接之前获取服务器版本。有什么想法吗?
【问题讨论】:
-
cxOracle 不使用 OCI 函数来获取版本,而是在连接后调用 dbms_utility.db_version 所以我认为你不能没有对 dbms_utility.db_version 过程具有执行权限的用户,你可以尝试绕过 cxoracle使用 ctypes 直接玩 OCI 客户端(pypy 上的 cxoracle 使用 ctypes)
-
连接函数是 Connection.c 中的 Connection_Connect 它调用 OCIServerAttach() 但在 auth 之前无法调用其他东西
-
bitbucket.org/pypy/pypy/src/default/pypy/module/oracle/… 是 rpython 你应该在 serverattach 之后调用 OCIServerVersion(),但是我不知道移植到 cpython+ctypes 有多么容易
-
不确定您的用例,但您是否尝试过使用 zxJDBC? from com.ziclix.python.sql import zxJDBC'
-
@jhon.smith:你还在寻找这个答案吗?如果上面的其他建议没有帮助,那么将此功能添加到 cx_Oracle 不会很困难。如果您仍然需要此功能,我相信我们可以帮助您添加此功能。