为了证明一个甲骨文的安全特征具有调用OCIServerVersion()或OCIServerRelease当用户会话尚未建立()。蟒蛇cx_oracle和服务器信息
虽然具有数据库参数sec_return_server_release_banner = false
。 我为此使用了Python cx_Oracle模块,但我不确定如何在建立连接之前获取服务器版本。有任何想法吗?
为了证明一个甲骨文的安全特征具有调用OCIServerVersion()或OCIServerRelease当用户会话尚未建立()。蟒蛇cx_oracle和服务器信息
虽然具有数据库参数sec_return_server_release_banner = false
。 我为此使用了Python cx_Oracle模块,但我不确定如何在建立连接之前获取服务器版本。有任何想法吗?
取决于您的软件架构和您的跨平台准备的意图。
cx_Oracle依赖于Oracle客户端。所以你确定有已知路径上的Oracle客户端。即使通过您不想使用Oracle客户端进行常规会话,您也可以使用它来对服务器进行初步检查。
在Linux/Unix,你可以下面的代码在运行子:
sqlplus user/[email protected] <<< "quit"| grep "Oracle Database"| head -n 1
grep和其他处理可以在你的代码来完成,并在Windows中是必要的。通过代码你将得到Oracle的版本,你会知道连接信息是否正确。
这假设已安装sqlplus。 Oracle Instantclient(仅提供OCI,因此对于cxOracle而言本身就足够了)不会默认使用sqlplus。 – cowbert 2014-09-23 23:46:06
没有建立连接。不,你永远不能问任何问题。这就像去Google谷歌页面(互联网架构 - 你称之为无会话或会话为基础)
至于认证,如果没有权限设置 - 甲骨文使用用户名'nobody'作为用户,因此给每个用户会话。
我是Oracle APEX的用户,我使用Python,PLSQL regurlary。
这是一个很好的问题。谢谢。
cxOracle不使用OCI函数获取版本,但在连接后调用dbms_utility.db_version,因此我认为如果没有用户对dbms_utility.db_version过程具有执行权限,您可以尝试通过直接与OCI客户端进行直接播放来绕过cxoracle使用ctypes(pypy上的cxoracle使用ctypes) – sherpya 2012-03-18 03:59:59
连接函数是Connection.c中的Connection_Connect,它调用OCIServerAttach(),但在auth之前没有办法调用别的东西 – sherpya 2012-03-18 04:02:47
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