之前新建了乙個資料庫,通過pl/sql developer登入,使用的是system使用者,身份為sysdba,結果報錯:insufficient privileges( 許可權不足 )。最後只好讓sys使用者登入後執行grant sysdba to system為system使用者賦予sysdba許可權。
這裡就有了問題:難道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身份。 system使用者擁有普通角色許可權,只能用normal身份登陸,除非你對它授予了sysdba的系統許可權或者syspoer系統許可權。
那這樣的話,為什麼之前很多時候可以直接用system使用者作為syadba登入呢?那時因為,當時oracle的驗證方式是os方式。而這次因為我登入前恰好改動了sqlnet.ora檔案,所以就不能以system使用者通過sysdba登入了。
oracle中sys使用者和system使用者的區別
sys和system使用者區別 一 最重要的區別,儲存的資料的重要性不同 sys 所有oracle的資料字典的基表和檢視都存放在sys使用者中,這些基表和檢視對於oracle的執行是至關重要的,由資料庫自己維護,任何使用者都不能手動更改。sys使用者擁有dba,sysdba,sysoper等角色或許...
Oracle中的sys使用者和system使用者
1 sys使用者是超級使用者,具有最高許可權即sysdba角色,有create database的許可權,所有oracle的資料字典的基表和檢視都存放在sys使用者中,這些基表和檢視對於oracle的執行是至關重要的,由資料庫自己維護,任何使用者都不能手動更改。該使用者的預設密碼是 change o...
Oracle中sys和system使用者的區別
oracle中sys和system使用者的區別 1.資料庫的啟動需要以sysdba sysoper身份登入。2.如果在同一主機上使用ipc連線到資料庫使用作業系統授權,登入任何乙個使用者都可以擁有as sysdba和as sysoper。3.sys和system使用者的區別 sys使用者具有dba許...