Oracle system用戶登錄數據庫也會出現問題嗎,下文對Oracle system用戶的實際權限作了分析討論,供您參考學習。
之前新建了一個數據庫,通過pl/sql developer登錄,使用的是Oracle system用戶,身份為SYSDBA,結果報錯:insufficIEnt privileges( 權限不足 )。最後只好讓sys用戶登錄後執行grant sysdba to system為Oracle system用戶賦予sysdba權限。
這裡就有了問題:難道Oracle system用戶不是默認具有SYSDBA權限的嗎?如果不是,為什麼以前很多時候,數據庫建好後直接就可以用system作為sysdba登錄呢?
首先要了解的是, 在Oracle數據庫系統中,用戶如果要以特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle會有兩種身份驗證的方法:操作系統驗證方式(OS)、密碼文件驗證方式。OS驗證方式是指,在登錄Oracle時,讓操作系統來完成登錄用戶的權限驗證。具體是:安裝 Oracle時(注意不是創建Oracle數據庫實例時),Oracle數據庫服務器所在的操作系統會產生一個用戶組(Windows中默認是 ORA_DBA),這個組中的用戶在登錄操作系統後又去登錄Oracle時,無論他輸入的用戶名密碼是什麼,都能夠以sysdba身份登錄成功。但是這時候實際上是以sys用戶在登錄的,所以登陸成功後以 show user命令查看當前登錄的用戶時,返回的是sys。
密碼文件驗證是指,Oracle通過一個密碼文件對登錄的用戶進行權限驗證,這個文件中記錄著 sys用戶的口令以及其它 特權用戶 的用戶名/口令,通俗的說就是這個文件中記錄了當前具有sysdba權限的用戶名及其口令。通常密碼文件是 存放在%ORACLE_HOME%\DATABASE目錄下,在使用Oracle Instance Manager創建一數據庫實例的時侯,Oracle系統會自動創建一個與實例對應的密碼文件,文件名為 PWDSID.ORA,其中SID代表相應的Oracle數據庫系統標識符。此密碼文件是進行初始數據庫管理工作的基礎。在此之後,管理員也可以根據需要,使用工具ORAPWD.EXE手工創建密碼文件。
那麼這兩種驗證方式在哪裡設置呢?具體在Oracle9i中是%Oracle_HOME%\ora92\network\admin\sqlnet.ora文件中,有如下的配置:
SQLNET.AUTHENTICATION_SERVICES = (NONE) # 這是密碼文件驗證方式.
SQLNET.AUTHENTICATION_SERVICES = (NTS) # 這是OS驗證方式.
說完了驗證方式,再說一下sys、system用戶的權限。sys用戶擁有dba,sysdba,sysoper等角色或權限,是oracle權限最高的用戶,所有oracle的數據字典的基表和視圖都存放在sys用戶中,登陸時也只能用sysdba、sysoper這兩個身份,不能用normal身份。 Oracle system用戶擁有普通角色權限,只能用normal身份登陸,除非你對它授予了sysdba的系統權限或者syspoer系統權限。
那這樣的話,為什麼之前很多時候可以直接用system用戶作為syadba登錄呢?那時因為,當時Oracle的驗證方式是OS方式。而這次因為我登錄前恰好改動了sqlnet.ora文件,所以就不能以system用戶通過sysdba登錄了。