2014-02-19 50 views
1

在RedHat 6服務器上,第三方應用程序需要以root身份運行並需要訪問sqlplus。我有一個正在運行的數據庫,我可以以用戶'oracle'的身份運行sqlplus。以root用戶身份登錄時,'sqlplus usr/pwd @ dbname'按預期工作。麻煩的是,這個代理需要運行沒有參數的sqlplus,它總是返回ORA-12546:TNS:permission denied。如何配置Oracle 11g啓動sqlplus?

我已經讀了十幾次,讓root啓動Oracle是一個安全問題,但我真的沒有別的選擇。

運行Oracle 11.2.0.1.0。

任何幫助將非常感謝,因爲我google了兩天沒有成功。

+0

你還沒有說過你試過的東西,所以這可能會重複。據推測,你有環境變量('ORACLE_HOME','TNS_ADMIN','ORACLE_SID' ...)設置正確,或者我認爲你會看到不同的錯誤。您是否正在使用完整的Oracle安裝,並且在您的'ORACLE_HOME'中有沒有什麼奇怪的權限?我建議你有一個單獨安裝的「root」即時客戶端用於保持儘可能多的分離 - 這是可行的嗎? –

+0

我擁有與oracle用戶完全相同的環境變量。是的,它是一個標準的Oracle Oracle安裝。我檢查了另一臺按預期運行的服務器的權限和所有權,但找不到差異,所以我懷疑它與某個配置有關。不幸的是,在這種情況下不可能爲root安裝一個單獨的客戶端。我覺得這是監聽器配置的問題,遠遠超過數據庫。感謝您的調查,迄今。 – PierreVn

+0

是的,我只是啓動sqlplus並依靠ORACLE_SID。我沒有配置任何錢包,也許有默認配置?運行正常的系統使用Oracle 11.1.0.6,而不是使用11.2.0.1。 TWO_TASK未在任一系統上設置。在兩個系統上找不到任何差別。我還沒有告訴它,但從用戶root,'tnsping dbname'正確答案!我很困惑! – PierreVn

回答

1

From the documentation,ORA_12546是:

ORA-12546:TNS:許可被拒絕
原因:用戶沒有足夠的權限來執行所請求的操作。 操作:獲得必要的權限並重試。

這是完全沒有任何幫助,但各種論壇和博客(太多的鏈接,谷歌搜索的錯誤顯示了很多類似的意見)提上安裝,$ORACLE_HOME/bin/oracle的特定部分的權限,這是大多數服務的關鍵和核心部分。

通常在該文件的權限將-rws-r-s--x,與oracle:dba擁有的文件,並在字寫的標誌,可能會發生這個錯誤 - 在這種模式最終x - 未設置。 dba羣組中的任何人都仍然可以執行此操作,但外面的人不會。

您的監聽器似乎很好,因爲您可以通過在連接字符串中指定@dbname進行遠程連接。偵聽程序的運行方式爲oracle(通常,可能爲帶有HA,RAC或ASM的grid),因此它位於dba組中,並且可以愉快地將連接切換到oracle可執行文件的實例。

當您不通過偵聽器連接時,您必須能夠自己執行該文件。看來root不能執行它(或者可能是其他文件,但通常這是罪魁禍首,顯然),這意味着世界可寫位實際上沒有設置。

至於我可以看到你有三種選擇:

  • 集世界可寫位,與chmod o+x $ORACLE_HOME/bin/oracle;但是這爲每個人開放了權限,並且可能他們因爲某種原因受到了限制;
  • root加到dba組,通過usermod/etc/group;這也可能削弱安全性;
  • 即使未在連接字符串中指定@dbname,也可以通過在root環境中添加export TWO_TASK=dbname來使用SQL * Net。

你說你在另一臺服務器上沒有這個問題,而且文件權限是一樣的;在這種情況下,root可能位於該框上的dba組中。但我認爲第三種選擇似乎是最簡單和最安全的。我想還有第四個選項,要安裝一個單獨的instant client,但是你必須設置TWO_TASK,並且通過SQL * Net,並且你已經排除了這一點。

我不會糾纏於它是否運行爲rootsqlplus(需要它或者實際上的應用程序)是一個好主意,但是會提到,你可能有一個腳本或函數調用sqlplus切換到一個通過su運行真實可執行文件的特權較低的帳戶,並且可能對應用程序透明。除非您切換到oracle帳戶,但這也不是一個好主意,您將擁有相同的權限問題和選項。

+0

這就是我所說的一個非常明確的解釋。我首先嚐試了TWO_TASK設置,現在它完美地工作。順便說一下,我想檢查oracle bin的權限,他們很好-rws-r-s -x。無論如何,非常感謝您的幫助!我的名聲不夠高,無法給你一分,或者我會感激。 – PierreVn

+0

@PierreVn - 很高興的工作;可能構成'$ ORACLE_HOME/bin'的路徑中的目錄具有750('drwx-rx ---')的權限,但不確定是否確實發生了該錯誤。還有一個訪問控制列表。所有這些與TWO_TASK無關,但總是很有趣,知道怎麼回事,而不僅僅是如何解決它。 –

+0

我認爲我值得一對滑動:我沒有檢查除/ home/oracle(安裝在下面的Oracle),這是700的子目錄的權限!我將它修改爲755,在shell會話中刪除了TWO_TASK,再次嘗試了sqlplus,猜測它是什麼:它也可以。對我感到羞恥! – PierreVn