天天看點

用SYS本地登入或遠端登入引起ORA-01031錯誤

  "曆史總是上演驚人的相似", 在技術開發過程中,你也會總會碰到驚人相似的問題,這段時間我就碰到了”ora-01031:insufficient privileges  權限不足”這個錯誤多次,一次是自己,一次是同僚碰到的,順便整理了下這個知識點。

情況一:

如果資料庫執行個體安裝在伺服器a上,你用管理者

權限administrator登入後,使用sql> conn system/manage as sysdba登入

沒有問題。但是如果你在伺服器a上建立一個etl賬号,使它率屬于remote desktop users 和users 組,如下所示:

用SYS本地登入或遠端登入引起ORA-01031錯誤

此時你用sys賬号登入資料庫時,就會報ora-01031:insufficient privileges錯誤,退出etl賬号,用管理者登入給etl賬号賦予率屬于oracle dba group的權限

用SYS本地登入或遠端登入引起ORA-01031錯誤

然後用etl賬号登入,問題解決了,如果你賦予etl賬号管理者組權限,但是沒有ora_dba權限,如下所示, 結果會怎樣?答案是依然會報權限不足的錯誤

用SYS本地登入或遠端登入引起ORA-01031錯誤

情況二:此時我在遠端機器b上,我使用sys賬号遠端登入時報ora-01031:insufficient privileges或ora-01017: invalid username/password; logon denied錯誤。

首先去檢查下sqlnet.ora檔案下是否有sqlnet.authentication_services= (nts)設定,如何已經配置了這個選項。那麼我們接下來檢查下一下密碼檔案參數

用SYS本地登入或遠端登入引起ORA-01031錯誤

很明顯密碼檔案存在,如果查詢沒有記錄,則說

明密碼檔案不存在,需要重建密碼檔案,有時候我們确實是sysdba的權限,為什麼登入卻提示你的權限不夠叻?這裡的問題可能出現在密碼檔案裡,由于你的

密碼檔案缺損或者不存在,而oralce執行個體對sysdba的權限是根據這個密碼檔案來判斷的,為什麼這樣做呢?如果我們的資料庫沒有open,那麼對于

的一些動态視圖是不能打開的,是以oracle必須把這些使用者的密碼和username放在一個獨立的檔案裡,這樣在資料庫還不是open的狀況寫,有個

地方判斷了。使用orapwd指令重建密碼檔案。orapwd指令的用法如下。

用SYS本地登入或遠端登入引起ORA-01031錯誤

接下來檢視系統參數remote_login_passwordfile

用SYS本地登入或遠端登入引起ORA-01031錯誤

如果value值不是exclusive,那麼需要設定參數remote_login_passwordfile的值為exclusive,有一次我檢查配置了上述所有配置後,發現都符合,在遠端用sql*plus登入後,居然報如下錯誤

用SYS本地登入或遠端登入引起ORA-01031錯誤

ora-01017: invalid username/password; logon denied錯誤,很是納悶,仔細檢查了所有配置後,最後發現居然是伺服器b的guest賬号被禁用了(如下所示)

用SYS本地登入或遠端登入引起ORA-01031錯誤

啟用了guest賬号,然後在機器a上用sys賬号登入,此時又報ora-01031: insufficient privileges,趕緊給guest賬号添加ora_dba使用者組,問題解決了。