釐清 User、Schema 關係與系統/物件權限差異,是 Oracle 安全架構設計的基石。本文透過定義對比、實例說明、視圖查詢,建立完整權限認知框架。
核心概念釐清
| 術語 | 定義 | 關鍵點 |
| User | 連線資料庫、存取物件的身分 | 認證主體 |
| Schema | 物件邏輯容器(Table, View, Index...) | User 建立時同名建立 Schema,一對一對應 |
| 關係 | User = Schema 別名(通俗理解) | 物件完整名稱 = SCHEMA.OBJECT,非 USER.OBJECT |
預設 Schema 行為
- 查詢
SELECT * FROM emp 實為 SELECT * FROM scott.emp(若登入 scott)。
- 建立物件未指定 Schema 時,存入預設 Schema(= 登入 User)。
- 可透過
ALTER SESSION SET CURRENT_SCHEMA = other_user 切換預設 Schema。
權限分類對比
| 維度 | 系統權限 | 物件權限 |
| 範圍 | 全資料庫級 | 特定物件級 |
| 範例 | CREATE TABLE, SELECT ANY TABLE | SELECT ON scott.emp |
| 授予語法 | GRANT priv TO user/role | GRANT priv ON obj TO user/role |
| 查詢視圖 | DBA_SYS_PRIVS | USER_TAB_PRIVS |
角色:權限集合管理
CREATE ROLE testrole; -- 無密碼
CREATE ROLE testrole IDENTIFIED BY pwd; -- 需密碼啟用
ALTER ROLE testrole IDENTIFIED BY newpwd;-- 修改密碼
GRANT CREATE TABLE TO testrole; -- 授權給角色
GRANT testrole TO user1; -- 角色授予使用者
實務建議
- 遵循最小權限原則:僅授予業務必要的系統/物件權限。
- 善用角色分層:
READ_ONLY, DEVELOPER, DBA_ROLE 等。
- 定期稽核
DBA_SYS_PRIVS, DBA_TAB_PRIVS, DBA_ROLE_PRIVS。
- 區分
WITH ADMIN OPTION(系統/角色可轉授)與 WITH GRANT OPTION(物件可轉授)。