傳統 Web 應用將安全邏輯寫在應用程式碼(如 PHP),資料庫僅作為被動儲存。風險:單一資料庫帳戶同時供公開頁面與後台管理使用,一旦公開端遭 SQL Injection,攻擊者即擁有完整寫入/刪除權限。Oracle 提供完善的資料庫端安全機制,將授權下沉至資料層,構建纵深防禦。
CONNECT:基本連線、建立自有表RESOURCE:擴充系統權限 (建立觸發器、Procedure 等)DBA:所有系統權限
CREATE TABLE WEB_CONTENT (
PAGE_ID NUMBER PRIMARY KEY,
PAGE_CONTENT VARCHAR2(255)
);
CREATE USER cms_user IDENTIFIED BY cms_user;
CREATE USER cms_editor IDENTIFIED BY cms_editor;
GRANT CONNECT TO cms_user, cms_editor;
-- 僅讀:公開頁面使用
GRANT SELECT ON hr.web_content TO cms_user;
-- 讀寫:後台管理使用
GRANT SELECT, INSERT, UPDATE, DELETE ON hr.web_content TO cms_editor;
驗證:cms_user 執行 INSERT 將報 ORA-01031: insufficient privileges。
CREATE ROLE reader;
CREATE ROLE writer;
GRANT SELECT ON web_content TO reader;
GRANT INSERT, UPDATE, DELETE ON web_content TO writer;
GRANT reader TO cms_user;
GRANT reader, writer TO cms_editor; -- 編輯者也需讀取
優勢:修改角色權限自動套用至所有擁有該角色用戶,無需逐一變更。
cms_user/cms_usercms_editor/cms_editor本文僅示範基礎權限模型。Oracle 進階功能可應對更嚴苛需求:
將資料存取授權下沉至資料庫層,配合角色化管理與最小權限原則,可有效阻斷 SQL Injection 導致的資料竄改/洩漏。PHP 開發者只需調整連線帳戶,即可零代碼變更獲得企業級安全防護。這正是「資料庫內建安全」的核心價值:簡化應用邏輯、強化資料防線。