Oracle 權限體系採用「使用者 → 角色 → 權限」三層架構,支援細粒度到欄位級的存取控制。本文系統梳理角色建立、系統權限與物件權限授權語法、WITH ADMIN/GRANT OPTION 傳遞機制、回收規則、生效時機差異、預設角色設定,並釐清常見誤區,助您建立符合最小權限原則的安全模型。
| 維度 | 系統權限 | 物件權限 |
|---|---|---|
| 範圍 | 資料庫級操作 (建表、建用戶、備份...) | 特定物件操作 (SELECT table、EXECUTE proc...) |
| 授權語法 | GRANT priv TO user/role WITH ADMIN OPTION | GRANT priv ON obj TO user/role WITH GRANT OPTION |
| 回收語法 | REVOKE priv FROM user/role | REVOKE priv ON obj FROM user/role |
| 傳遞權 | ADMIN OPTION:可再授權、可回收、可修改/刪除角色 | GRANT OPTION:可再授權、可建 View 並授權 |
| 生效時機 | 立即生效 | 立即生效 |
-- 需密碼驗證啟用
CREATE ROLE clerk IDENTIFIED BY bicentennial;
-- 無需密碼 (預設 NOT IDENTIFIED)
CREATE ROLE app_readonly;
-- 授予建立 Session、Table、Procedure 權限給角色
GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE TO clerk;
-- 授予角色給使用者 (若角色有密碼需驗證)
GRANT clerk TO jward;
-- 或指定密碼啟用
GRANT clerk TO jward IDENTIFIED BY bicentennial;
GRANT new_dba TO michael WITH ADMIN OPTION;
獲得者可:
DROP 該角色
-- 單一物件多權限
GRANT SELECT, INSERT, DELETE ON emp TO jfee, tsmith;
-- 全部物件權限 (ALL = SELECT/INSERT/UPDATE/DELETE/REFERENCES/ALTER/INDEX...)
GRANT ALL ON emp TO jfee;
GRANT SELECT ON emp TO jfee WITH GRANT OPTION;
獲得者可:
CREATE VIEW,可基於此表建 View 並授權他人查詢 View
-- 僅允許插入/修改 acct_no 欄位
GRANT INSERT (acct_no), UPDATE (acct_no) ON accounts TO scott;
REVOKE CREATE TABLE FROM tsmith;
ADMIN OPTION 或 GRANT ANY PRIVILEGE 者可回收。ADMIN OPTION 本身不可單獨回收,需連同權限一起回收再重新授予 (不含 ADMIN OPTION)。
REVOKE ALL ON dept FROM human_resource;
GRANT ANY OBJECT PRIVILEGE。| 操作 | 生效時機 | 說明 |
|---|---|---|
| 系統/物件權限 GRANT/REVOKE | 立即 | 下一條 SQL 即生效 |
| 角色 GRANT/REVOKE | 下一個新 Session | 現有 Session 不受影響,除非執行 SET ROLE |
-- 啟用特定角色 (若有密碼需帶密碼)
SET ROLE clerk IDENTIFIED BY bicentennial;
-- 啟用所有預設角色
SET ROLE ALL;
-- 停用所有角色
SET ROLE NONE;
-- 停用特定角色
SET ROLE ALL EXCEPT clerk;
-- 登入時自動啟用的角色清單
ALTER USER jane DEFAULT ROLE payclerk, pettycash;
-- 取消所有預設角色
ALTER USER jane DEFAULT ROLE NONE;
-- 全部角色設為預設 (慎用)
ALTER USER jane DEFAULT ROLE ALL;
APP_READ、APP_WRITE、APP_ADMIN 等應用角色,而非直接授權給使用者。DBA、ANY 類系統權限;物件權限精確到欄位。AUDIT GRANT, REVOKE, CREATE ROLE, ALTER ROLE 記錄權限變更。DBA_ROLE_PRIVS、DBA_SYS_PRIVS、DBA_TAB_PRIVS 產出權限矩陣報表。SECURE APPLICATION ROLE (PL/SQL 包驗證)。
-- 使用者系統權限
SELECT * FROM USER_SYS_PRIVS;
-- 使用者物件權限
SELECT * FROM USER_TAB_PRIVS;
-- 使用者角色
SELECT * FROM USER_ROLE_PRIVS;
-- 角色系統權限
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'RESOURCE';
-- 角色物件權限
SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE = 'RESOURCE';
權限管理是資料庫安全的基石。透過角色封裝權限、善用 ADMIN/GRANT OPTION 控制傳遞鏈、理解生效時機差異,即可構建清晰、可稽核、可維運的授權體系。