Oracle 資料庫的安全體系建立在三大基石之上:用戶識別鑑別、授權與存取控制、稽核技術,並輔以觸發器實現自訂安全邏輯,形成纵深防禦體系。數據字典在授權檢查與稽核記錄中扮演核心角色,且獨立於作業系統安全機制運作。
最外層防線:用戶必須宣告身分,系統驗證密碼。允許連續失敗三次,第三次失敗自動斷開連線,有效阻擋暴力破解。
採 非集中式授權模型:DBA 負責系統權限,物件擁有者負責自有物件權限。支援重複授權(不報錯)與無效回收(回收不存在權限亦視為成功),簡化管理腳本邏輯。
角色授權範例: GRANT CONNECT TO U1; 一次性授予十餘項系統權限,避免逐條 GRANT。
ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, ALL,透過 GRANT/REVOKE 控制。
透過 視圖 實現:建立水平子集視圖(如僅含資管系學生),授予視圖 SELECT 權限而非基礎表。
兩種實現路徑:
GRANT UPDATE(Sno, Cno) ON SC TO U2; 僅授予特定欄位更新權。回收時 REVOKE UPDATE ON SC FROM U2; 為整表回收,不支援單欄回收。層級約束: 上層權限約束下層,擁有表級 UPDATE 即隱含所有欄位 UPDATE。採分散式控制,WITH GRANT OPTION 允許轉授,但禁止循環授權。所有權限資訊記錄於數據字典,每次操作前必經字典合法性檢查。
| 類型 | 設定者 | 監控範圍 |
|---|---|---|
| 用戶級稽核 | 物件擁有者 | 自有表/視圖的所有成功/失敗存取與 SQL 操作 |
| 系統級稽核 | DBA | 登入嘗試、GRANT/REVOKE、系統權限操作 |
指令範例:
-- 稽核 SC 表的結構變更與資料修改
AUDIT ALTER, UPDATE ON SC;
-- 取消 SC 表所有稽核
NOAUDIT ALL ON SC;
稽核設定存於 SYS.TABLES,稽核記錄存於 SYS.AUDIT_TRAIL,均屬數據字典。
範例:限制 Student 表僅能在工作日 08:00-17:00 修改:
CREATE OR REPLACE TRIGGER secure_student
BEFORE INSERT OR UPDATE OR DELETE ON student
BEGIN
IF (TO_CHAR(SYSDATE, 'DY') IN ('SAT','SUN'))
OR (TO_NUMBER(TO_CHAR(SYSDATE,'HH24')) NOT BETWEEN 8 AND 17) THEN
RAISE_APPLICATION_ERROR(-20506,
'You may only change data during normal business hours.');
END IF;
END;
觸發器存於數據字典,每次 DML 自動觸發檢查。同理可細化稽核規則,實現更精細的操作粒度控制。
Oracle 提供從實例登入、物件存取、操作稽核到業務邏輯管控的完整多層次安全體系,配合數據字典集中管理,滿足企業級合規與資安需求。