| 概念 | 本質 | 包含 | 權限控制 |
|---|---|---|---|
| User | 帳號、登入憑證 | 系統權限、角色、配額、密碼 | 是 (GRANT/REVOKE) |
| Schema | 對象容器、命名空間 | 表、視圖、索引、序列、程序、套件、同義詞... | 否 (對象權限屬於 User) |
一對一對應:每個 User 擁有同名 Schema,但「User 是主人,Schema 是房子」。
場景:應用程式硬編碼表名 `EMP`,需切換至 `HR` Schema 環境,不想改代碼、不想建同義詞。
ALTER SESSION SET CURRENT_SCHEMA = hr; -- 後續無限定名查詢自動解析為 HR.EMP SELECT * FROM emp; -- 實際查詢 HR.EMP INSERT INTO emp ... -- 實際插入 HR.EMP
-- 登入公共連線池用戶 APP_USER -- 租戶 A 請求到來 EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA = tenant_a'; -- 所有 SQL 自動路由至 TENANT_A -- 租戶 B 請求 EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA = tenant_b'; -- 所有 SQL 自動路由至 TENANT_B
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 公共同義詞 | 永久、全局可見 | 命名衝突、維護成本高、權限粗放 | 少量共享參考表 |
| 私有同義詞 | 用戶級隔離 | 需為每用戶建立、DDL 操作多 | 固定 Schema 映射 |
| ALTER SESSION | 動態、無 DDL、代碼零修改 | Session 級、DDL 不受影響、需應用層管理 | 多租戶、多環境切換、測試/生產同代碼 |
EM 中「Schema」節點即對應 User 下的所有對象,管理動作 (建表、授權、監控) 實質操作 User 的 Schema 容器。