天天看點

oracle自帶的資料字典,Oracle系列之三内置使用者及相關概念

Oracle安裝過程中系統提示我們需要修改2個使用者的密碼,sys,system他們的預設密碼是:sys/change_on_install,system/manager;那麼這兩個使用者的權限是什麼呢?

SYS和SYSTEM

是每個ORACLE 資料庫系統預設安裝的兩個帳戶。SYS

是所有内部資料庫表、結構、過程包、等擁有者,此外它還擁有 V$

和資料字典視圖,并建立所有封裝的資料庫角色(DBA,CONNECT,RESOURCE等)。

Sys是一個唯一能通路特定内部資料字典的使用者。System 也是在安裝ORACLE

時建立的使用者,用于 DBA 任務的管理。

這裡有2個概念我們需要明白:

1.V$指的是什麼:以V$開頭的表我們稱為系統性能表,記錄oracle運作過程中的資訊,是儲存在記憶體中的,我們可以檢視。

2.資料字典視圖:資料字典就是資料字典,與視圖有什麼關系?資料字典我們知道是系統維護的,我們不能進行操作,理論上不能檢視,但是不能檢視又對使用者不公平,是以系統提供了視圖的形式供我們檢視,這樣我們就可以使用标準的select語句進行資料的檢視了,就相當于SQLServer中的系統表。那麼在Oracle中存在3類資料字典視圖分别是以“alL_”,“dba_”,“user_”開頭進行命名,這三類視圖有什麼差別呢?是不是權限的問題呀?提起權限我們就有點頭大,可以這麼說:

user_開頭的視圖表示這個視圖中隻存儲目前使用者的資訊,如:

SQL> conn scott/tiger

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as scott

SQL> select table_name from user_all_tables;

TABLE_NAME

------------------------------

BONUS

DEPT

EMP

SALGRADE

表示該使用者擁有4張表。

字首為DBA_的資料字典視圖,包含了資料庫擁有的所有對象和權限的資訊。

字首為ALL_的資料字典視圖,包含了使用者目前可以通路的全部對象和權限的資訊,該對象也許是其他使用者授權的。比如說:

SQL> conn sys/kdk as sysdba

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as SYS

SQL> CREATE USER tellix identified by stephen;--建立使用者指令

SQL> grant connect to tellixu;--授權

SQL> grant resources to tellix;-- 授權

SQL> conn tellix/stephen;

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as tellix

SQL> create table test

2 (

3 a number(4),

4 b varchar2(20)

5 );

Table created

SQL> grant all on test to scott;

SQL> conn scott/tiger;

Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0

Connected as scott

SQL> select OWNER,TABLE_NAME from all_all_tables where

owner='TELLIX';

OWNER TABLE_NAME

------------------------------ ------------------------------

TELLIX TEST

這裡我們把tellix使用者的表授權給scott使用者,則在scott使用者下查詢all_all_tables就可以查詢出來資訊。

說到使用者我們不免提到一個詞:schema,很多地方說schema就是方案,有些資料中說是模式,呵呵,我認為我們沒有必要非要使用漢語來解釋,我們就說schema這個詞,其實schema就是一個概念,我個人感覺應該這麼說:一個使用者以及這個使用者下所有資料庫的對象(如:使用者的表,使用者的存儲過程,使用者的函數,視圖,同義詞,序列等等)的一個統稱,很多人問我:如何建立一個schema,schema是資料庫對象嗎?我認為不是呀,他其實是一個概念而已嘛,那麼如何建立呢?我們其實建立一個使用者的時候,一個Schema就存在了!我們平時說的schema名稱就是使用者名而已!

說到這裡有必要再羅嗦幾句:很多人學習oracle之前可能已經了解了SQLServer了,在SQLServer企業管理器中我們非常容易就可以建立一個資料庫,或者使用create

database指令就非常友善建立一個資料庫,但是在Oracle中建立一個資料庫不是一個簡單的事情,在同一台伺服器上盡管可以建立多個資料庫,但是一般情況下隻建立一個資料庫。這個資料庫地位非常高,那麼如何區分不同“區域”的資料呢?使用使用者,在同一個資料庫中,不同使用者之間不能互相通路資料(除非授權),這個概念sqlserver中也存在,隻是在sqlserver中我們做項目第一件事是建立一個資料庫;但是在oracle中我們做項目第一件事是建立一個使用者,然後在賦予這個使用者所需要的角色權限即可,順便說一下,一個使用者建立成功後至少需要connect,resource兩個角色才能進行正常的CRUD操作。

學習Oracle一定要在觀念上與sqlserver區分開來。