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