應用層控制權限:單一資料庫帳戶,PHP 判斷用戶角色。若公開頁面遭 SQL Injection,攻擊者可執行任意 DML(含 DELETE、DROP),因帳戶擁有完整權限。
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;
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_editor(讀寫)資料庫層級權限控制雖增加初期設計成本,卻能從根本上限縮攻擊面,降低應用複雜度,構建纵深防禦。