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