「User」與「Schema」是 Oracle 最基礎又最易混淆的兩個概念。簡單說:User 是登入認證主體,Schema 是物件邏輯容器。Oracle 採一對一綁定:建立 User 即自動建立同名 Schema,且無法單獨建立 Schema。本文從定義、關係、物件存取路徑、預設 Schema、跨 Schema 存取、企業管理器呈現、DB2 差異對比七個維度深度釐清,並給出實務操作建議。
| 維度 | User (使用者) | Schema (綱要/模式) |
|---|---|---|
| 定義 | 資料庫中定義的名稱,可連線並存取物件 | 資料庫物件的邏輯集合 (Table, View, Index...) |
| 主要功能 | 認證 (密碼/外部/全域)、授權載體 | 命名空間隔離、物件歸屬管理 |
| 建立方式 | CREATE USER ... | 隨 User 自動建立 (同名),不可單獨 CREATE SCHEMA |
| 刪除方式 | DROP USER ... CASCADE | 隨 User 刪除 (含所有物件) |
| 關係 | 1 User ↔ 1 Schema (同名) |
schema_name.object_name
-- 範例:SCOTT.EMP
注意: 物件歸屬 Schema,不歸屬 User。User 只是擁有 Schema 的主體。
SELECT * FROM emp 實際執行 SELECT * FROM scott.emp (若當前 User=SCOTT)。
-- 當前 User = SCOTT
CREATE TABLE dept (...); -- 實際建立 SCOTT.DEPT
CREATE TABLE hr.emp (...); -- 需 CREATE ANY TABLE 權限,建立 HR.EMP
-- 直接指定 Schema
SELECT * FROM hr.employees;
-- 建立同義詞簡化存取 (私有/公用)
CREATE SYNONYM emp FOR hr.employees; -- 私有同義詞 (當前 Schema)
CREATE PUBLIC SYNONYM emp FOR hr.employees; -- 公用同義詞 (全庫可見,需權限)
Schema 是邏輯容器,表空間是物理儲存單位。兩者無綁定關係。
TABLESPACE users / TABLESPACE data01)。| 特性 | Oracle | DB2 (LUW) |
|---|---|---|
| User : Schema | 1 : 1 (強綁定) | 1 : N (用戶可擁有多個 Schema) |
| 建立 Schema | 自動隨 User 建立 | CREATE SCHEMA AUTHORIZATION user |
| 物件完整名 | schema.object | schema.object (但 schema 可異於 user) |
| 授權模型 | Grant 給 User/Role | Grant 給 User/Group/Role,Schema 獨立授權 |
CRM, ERP, DW),避免人名。APP_USER (僅有物件權限) 連線,透過同義詞存取。SCHEMAS=schema_list 按 Schema 導出,而非 User。DBA_OBJECTS 的 OWNER (Schema) 欄位,而非 User。| 誤區 | 正確觀念 |
|---|---|
| 「我要建一個 Schema」 | 請執行 CREATE USER,Schema 會自動建立 |
| 「User 和 Schema 是同一個東西」 | 概念不同:User=認證主體,Schema=物件容器,恰好 1:1 綁定 |
CREATE SCHEMA 可以建 Schema | Oracle CREATE SCHEMA 僅能在單一交易中批次建立多個物件,不建立 Schema 本身 |
| 刪除 User 不會刪 Schema 物件 | DROP USER u CASCADE 會連同 Schema 所有物件一併刪除 |
看透 User (認證) 與 Schema (容器) 的本質差異,即能正確設計帳號架構、物件歸屬、跨 Schema 存取與備份策略,避免因概念模糊導致的權限混亂與運維困境。