權限體系兩大類別
- System Privileges (系統權限):跨 Schema 的管理能力 (建表、建用戶、備份等),80+ 細項,由 DBA 授予。
- Object Privileges (物件權限):針對特定 Schema 物件 (表/視圖/序列/程序) 的操作權,由物件擁有者授予。
一、建立用戶與基礎授權標準流程
-- 1. 建立用戶 (需 DBA 權限)
CREATE USER db_user IDENTIFIED BY db_user_pw;
-- 2. 授予建立會話權限 (登入門檻)
GRANT CREATE SESSION TO db_user;
-- 3. 授予 RESOURCE 角色 (建表/序列/觸發器等開發權限)
GRANT RESOURCE TO db_user;
-- 4. 視業務需要授予特定系統權限
GRANT CREATE VIEW, CREATE PROCEDURE TO db_user;
二、物件權限授權範例
-- 用戶 A 授予用戶 B 查詢/修改自有表權限
GRANT SELECT, INSERT, UPDATE ON a.emp TO b;
GRANT ALL ON a.dept TO b WITH GRANT OPTION; -- 允許 B 轉授
-- 回收權限
REVOKE UPDATE ON a.emp FROM b;
REVOKE ALL ON a.dept FROM b;
三、用戶自查權限視圖 (無需 DBA 權限)
| 視圖 | 用途 | 關鍵欄位 |
USER_TAB_PRIVS | 我對他人物件的權限 / 他人對我物件的權限 | GRANTEE, OWNER, TABLE_NAME, PRIVILEGE, GRANTOR, HIERARCHY |
USER_SYS_PRIVS | 我擁有的系統權限 | PRIVILEGE, ADMIN_OPTION |
USER_ROLE_PRIVS | 我被授予的角色 | GRANTED_ROLE, ADMIN_OPTION, DEFAULT_ROLE |
USER_COL_PRIVS | 欄位級權限 | TABLE_NAME, COLUMN_NAME, PRIVILEGE |
-- 實戰查詢
SELECT * FROM USER_TAB_PRIVS; -- 物件權限
SELECT * FROM USER_SYS_PRIVS; -- 系統權限
SELECT * FROM USER_ROLE_PRIVS; -- 角色
四、DBA 視角全局權限審計
-- 所有用戶系統權限
SELECT * FROM DBA_SYS_PRIVS;
-- 所有物件授權關係
SELECT * FROM DBA_TAB_PRIVS;
-- 角色授予鏈
SELECT * FROM DBA_ROLE_PRIVS;
五、最佳實踐原則
- 最小權限原則:僅授予業務必需權限,避免濫用
DBA/RESOURCE 角色。
- 角色封裝:將系統/物件權限打包為應用角色 (如
APP_READONLY, APP_DEVELOPER),授予角色而非散發權限。
- 定期審計:季度掃描
DBA_TAB_PRIVS 發現異常授權 (如 WITH GRANT OPTION 濫用、離職帳號殘留權限)。
- 密碼策略:配合 Profile 強制複雜度、過期、鎖定策略。