在存取控制的世界裡, 誰在存取、誰被存取 是最基本的問題。理解 Subject 與 Object 的角色區分,是掌握所有存取控制模型(DAC、MAC、RBAC)的第一步。 什麼是 Subject(主體)? Subject 是主動發起存取請求的實體 ,代表「行動的一方」。常見形式包括:登入系統的使用者、執行中的程序(Process)、呼叫 API 的服務帳號。關鍵在於,Subject 的定義不限於「人」,任何主動觸發存取行為的實體皆屬之。例如,一支排程腳本在深夜自動讀取資料庫,此時該腳本的執行程序就是 Subject。 角色由行為決定,而非由身份決定。 系統在評估權限時,會先識別當前的 Subject,再判斷其是否有權對目標資源執行操作。 什麼是 Object(客體)? Object 是被動接受存取的目標資源 ,代表「被操作的一方」。常見形式包括:檔案、資料庫記錄、記憶體區段、網路埠口、甚至另一個程序。 同一個實體可以在不同情境下扮演不同角色。 例如,程序 A 讀取一份設定檔時,設定檔是 Object;但程序 A 向程序 B 發送訊號時,程序 B 成為 Object,程序 A 則是 Subject。這種 角色的動態性 正是存取控制模型中最容易被忽略的核心細節。Object 本身不主動參與決策,僅作為被保護的目標。 💡 重點整理 Subject = 主動方 :發起存取請求的實體,可以是使用者、程序或服務。 Object = 被動方 :被存取的目標資源,本身不主導決策。 角色由行為決定 :同一實體可視情境交替扮演 Subject 或 Object。 存取控制的核心判斷 :「哪個 Subject 可以對哪個 Object 執行哪種操作」。 掌握 Subject 與 Object 的區分,是設計任何存取控制策略的前提。 角色非固定,行為才是判斷依據。 無論面對 DAC、MAC 或 RBAC,這組概念都是分析權限模型的起點。 📚 參考文獻 NIST SP 800-162, Guide to Attribute Based Access Control (ABAC) Definition and Considerations — csrc.nist.gov ...