首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

將 Oracle 內建安全特性應用於 PHP 應用:資料庫層級存取控制實踐

     編輯:Oracle 資料庫相關知識

傳統模式風險

應用層控制權限:單一資料庫帳戶,PHP 判斷用戶角色。若公開頁面遭 SQL Injection,攻擊者可執行任意 DML(含 DELETE、DROP),因帳戶擁有完整權限。

Oracle 資料庫層級防護策略

核心概念

  • 驗證:密碼、OS、網路、Kerberos 等強驗證
  • 權限:物件級 SELECT/INSERT/UPDATE/DELETE/EXECUTE
  • 角色:權限命名集合,簡化大量用戶管理

預定義角色

  • CONNECT:基本連線、建立自有表
  • RESOURCE:含建立 Trigger/Procedure 等系統權限
  • DBA:所有系統權限

實戰案例:CMS 內容管理系統

1. 建立資料表(HR Schema)

CREATE TABLE web_content (
  page_id NUMBER PRIMARY KEY,
  page_content VARCHAR2(255)
);

2. 建立角色帳戶

CREATE USER cms_user IDENTIFIED BY cms_user;
CREATE USER cms_editor IDENTIFIED BY cms_editor;
GRANT CONNECT TO cms_user, cms_editor;

3. 授予最小權限

-- 匿名訪客:唯讀
GRANT SELECT ON hr.web_content TO cms_user;

-- 編輯者:讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON hr.web_content TO cms_editor;

4. 角色化管理(非 XE 版)

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;

修改角色權限即自動套用所有成員,無需逐一更新用戶。

PHP 整合要點

  • 公開頁面連線使用 cms_user(唯讀)
  • 後台管理頁面連線使用 cms_editor(讀寫)
  • 即使公開頁面遭注入,資料庫層級封鎖寫入操作

進階安全特性預覽

  • VPD (Virtual Private Database):行級安全政策
  • Label Security:標籤式強制存取控制

結論

資料庫層級權限控制雖增加初期設計成本,卻能從根本上限縮攻擊面,降低應用複雜度,構建纵深防禦。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved