2012-02-22 92 views
7

为了证明一个甲骨文的安全特征具有调用OCIServerVersion()OCIServerRelease当用户会话尚未建立()蟒蛇cx_oracle和服务器信息

虽然具有数据库参数sec_return_server_release_banner = false。 我为此使用了Python cx_Oracle模块,但我不确定如何在建立连接之前获取服务器版本。有任何想法吗?

+1

cxOracle不使用OCI函数获取版本,但在连接后调用dbms_utility.db_version,因此我认为如果没有用户对dbms_utility.db_version过程具有执行权限,您可以尝试通过直接与OCI客户端进行直接播放来绕过cxoracle使用ctypes(pypy上的cxoracle使用ctypes) – sherpya 2012-03-18 03:59:59

+0

连接函数是Connection.c中的Connection_Connect,它调用OCIServerAttach(),但在auth之前没有办法调用别的东西 – sherpya 2012-03-18 04:02:47

+1

https://bitbucket.org/pypy/pypy/src/ default/pypy/module/oracle/interp_connect.py 它是rpython,你应该在serverattach后调用OCIServerVersion(),但我不知道如何移植到cpython + ctypes – sherpya 2012-03-18 04:08:29

回答

0

取决于您的软件架构和您的跨平台准备的意图。

cx_Oracle依赖于Oracle客户端。所以你确定有已知路径上的Oracle客户端。即使通过您不想使用Oracle客户端进行常规会话,您也可以使用它来对服务器进行初步检查。

在Linux/Unix,你可以下面的代码在运行子:

sqlplus user/[email protected] <<< "quit"| grep "Oracle Database"| head -n 1 

grep和其他处理可以在你的代码来完成,并在Windows中是必要的。通过代码你将得到Oracle的版本,你会知道连接信息是否正确。

+0

这假设已安装sqlplus。 Oracle Instantclient(仅提供OCI,因此对于cxOracle而言本身就足够了)不会默认使用sqlplus。 – cowbert 2014-09-23 23:46:06

0

没有建立连接。不,你永远不能问任何问题。这就像去Google谷歌页面(互联网架构 - 你称之为无会话或会话为基础)

至于认证,如果没有权限设置 - 甲骨文使用用户名'nobody'作为用户,因此给每个用户会话。

我是Oracle APEX的用户,我使用Python,PLSQL regurlary。

这是一个很好的问题。谢谢。