2011-09-28 44 views
0

我正在用C++編寫CGI程序。它應該在2.2版的Apache HTTP Server上運行,並且需要連接到Oracle數據庫10g。無法使用帶有httpd 2.2的C++ CGI連接到Oracle數據庫10g

我試圖運行這個沒有httpd的CGI程序,它可以成功連接到Oracle數據庫,但是一旦我通過httpd服務器運行它,它會在error_log中寫下以下消息。

錯誤,而試圖檢索錯誤文本ORA-12546

我怎樣才能解決這個問題?

+0

你在運行什麼操作系統?如果是Linux,你有SELinux嗎? (如果是這樣,日誌中的任何可疑內容?)當您以web服務器的帳戶登錄時,是否可以使用sqlplus登錄? – Mat

+0

謝謝Sathya,這是SELinux阻止http服務。我已經根據日誌修復了它 – user966085

回答

0

這通常意味着您遇到了ORA-12546錯誤,但您的客戶端庫沒有安裝實際的錯誤消息。這不是問題,您可以搜索錯誤號here。在你的情況下,它是「TNS:權限被拒絕」。

您的CGI用戶是否有權限訪問tnsnames.ora?

0

只是一個猜測,但這種類型的事情的一個常見原因是沒有爲您的CGI程序設置ORACLE_HOME環境。 Apache通常在啓動時啓動,因此會跳過所有/ etc/profile類型的內容。

您將需要確保設置了ORACLE_HOME,並且根據您的系統設置,您可能還需要更新LD_LIBRARY_PATH以包含$ORACLE_HOME/lib。您可能需要您的程序來設置環境,或者在您的apache配置中使用SetEnv指令。打賭,看看這是否是這個問題只是編寫一個測試CGI,它會轉儲所有的環境變量。

現在,如果CGI在mod_perl下運行,它有點棘手,因爲mod_perl對於環境安全往往是非常肛門的。認爲我們最終使用Perl * Something * Require指令在perl中設置它。對不起,很模糊,幾年前...