2012-02-22 188 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。

這是一個很好的問題。謝謝。