8-1 Oracle 系統架構

8-2 資料字典

8-3 使用者(User)

8-4 資料庫安全性

8-5 權限與角色

 
   

資料字典(Data Dictionary) 是 ORACLE 系統中最重要的部分之一,主要是由一組唯讀的表格(Table) 或其視觀表格(View) 所組成。它主要提供以下有關資料庫的資訊:

使用者(User) 的名字。

每個使用者所授與的權限(Privilege) 與角色(Role)。

綱要物件(Schema),如表格(Table)、視觀表格(View)、快照(Snapshot)、索引(Index)、簇集(Cluster)、序列(Sequence)、副程式(Procedure)、函數(Function)、套裝程式(Package) 與觸發器(Trigger)。

有關整合性限制(Integrity constraint) 的資訊。

欄位的預設值。

有關資料庫中物件所給予的空間大小以及空間的使用情況。

稽核(Audit) 資訊,如存取或更新物件內容。

其他一般的資料庫資訊。


使用者可利用 SQL 指令,以查詢某特定資料字典的方式,獲取其所需的資料庫資訊。因為資料字典為唯讀,所以只允許查詢。
 

查詢使用者目前的資訊。

 

SQL> SELECT * FROM USER_USERS;

   

資料庫資料字典是由基本表格(Table) 和使用者可存取的視觀表格(View) 所組成。 

基本表格(Base Table)

資料字典的基礎是一組基本表格組成,儲存相關的資料庫的資訊。這些資訊僅由 ORACLE 系統讀和寫,它們很少被 ORACLE 使用者直接存取。

使用者可存取視觀表格(User Accessible Views)

資料字典包含使用者可存取的視觀表格,並且顯示資料字典的基本表格之資訊。視觀表格將基本表格中資訊解讀成可用資訊。資料字典中全部基本表格和使用者可存取視觀表格為 ORACLE 使用者 SYS 所持有。

 

ORACLE 資料庫字典中儲存了關於每位合法使用者的下列資訊:
 

使用者是否持有特定權限。

使用者所建立的表格、索引和簇集的預定表空間(Default Tablespace)。

使用者所建立的預定臨時表空間。

使用者被允許之表空間的使用。

 

User Process:

當使用者的應用程式欲以 SQL 指令存取資料庫資料時,例如:Pro*C程式、Oracle Tools、SQL*plus、Oracle Form 等等,Oracle 會產生 User Process去執行這些工作。
 

Oracle Process:

Oracle Process 依執行的方式不同可大概分為 Server Process 與 Background Process 兩種:
                       ※Server Process
                       ※Background Proces


ORACLE 使用者可利用 SQL 指令,依本身的權限查詢資料字典內的視觀表格(View)。視觀表格存放在 ORACLE 系統的名稱為 SYSTEM 的表空間(Tablespace) 中。資料字典內包含多組的視觀表格,可依其前置詞(Prefix) 的不同分成三組含有類似資訊的視觀表格:
 

 1. 前置詞(Prefix) 為 USER 的視觀表格(View),例如:USER_TABLES,主要為以使用者本身為觀點,查詢使用者本身在資料庫系統中的自身資訊,例如:使用者所產生的物件(Object)、被授予的權限(Privilege) 與產生的時間等等資訊。
 

查詢使用者本身所擁有的表格資訊。
 

SQL> SELECT TABLE_NAME, TABLESPACE_NAME
2 FROM USER_TABLES;

   

2. 前置詞(Prfix) 為 ALL 的視觀表格,例如:ALL_TABLES,主要是以使用者為觀點,全面性地查詢使用者所能存取的物件資訊,這包括使用者本身所擁有物件外,再加上因被授予權限或角色而能存取的物件。若是我們未在查詢的 SQL 指令中加上特定使用者的條件,則內定為全部使用者。
 

查詢全部使用者的表格資訊。
 

SQL> SELECT TABLE_NAME, TABLESPACE_NAME
2 FROM ALL_TABLES;

與例 1 不同之處,在於例 1 只會列出目前使用者本身擁有的表格,而例 2 會列出全部使用者所擁有的表格,若要利用 ALL_TABLES 查詢目前使用者本身擁有的表格,可在查詢上加上條件 WHERE OWNER=‘使用者’。

   

查詢目前使用者 JEHUANG 所擁有的表格。

 

SQL> SELECT TABLE_NAME, TABLESPACE_NAME
2 FROM ALL_TABLES
3 WHERE OWNER = ‘JEHUANG’;

其中使用者要大寫,因為 ORACLE 系統內定為大寫。

   

 3. 前置詞為 DBA 的視觀表格,例如:DBA_TABLES,以資料庫整體為觀點,也就是資料庫系統管理者觀點。也只有擁有 DBA 角色的使用者才能查詢此類的視觀表格。若非原內定的 DBA 使用者,例如:SYS 或 SYSTEM,則查詢此類視觀表格必須在視觀表格前加上原來的擁有者 SYS。
 

查詢 DBA 所擁有的表格。

 

SQL> SELECT TABLE_NAME, TABLESPACE_NAME
2 FROM SYS.DBA_TABLES;

   

利用資料字典中的 DICT 查詢資料字典中以 ‘USER_TABLE’ 開頭的視觀表格(VIEW)的意義。(利用資料字典中的 DICT 查詢其他資料字典中視觀表格意義的例子)

 


   

利用資料字典中的 DICT_COLUMNS 查詢資料字典中的視觀表格‘USER_TAB_PRIVS’ 中各欄位的意義。(利用資料字典 DICT_COLUMNS 查詢其他資料字典中視觀表格的欄位意義的例子)

 


   

利用資料字典中的 USER_TAB_COLUMNS 查看使用者的表格 EMP 的表格結構。(利用資料字典中的 USER_TAB_COLUMNS 查看表格結構的例子)

 


這個查詢相當使用了 DESC EMP 指令。