AccessCheck 的運作方式
當執行緒嘗試存取安全性實體物件時,系統會授與或拒絕存取。 如果物件沒有 DACL) (任意存取控制清單,則系統會授與存取權;否則,系統會在套用至執行緒的物件 DACL 中尋找存取控制專案 (ACE) 。 物件 DACL 中的每個 ACE 都會指定 信任項所允許或拒絕的存取權限,可以是使用者帳戶、群群組帳戶或 登入會話。
系統會將每個 ACE 中的信任項與執行緒 存取權杖中所識別的信任項進行比較。 存取權杖包含 (SID ) 安全性識別碼 ,可識別使用者所屬的使用者和群組帳戶。 權杖也包含識別目前登入會話的 登入 SID 。 在存取檢查期間,系統會忽略未啟用的群組 SID。 如需啟用、停用和僅限拒絕的 SID 的詳細資訊,請參閱 存取權杖中的 SID 屬性。
一般而言,系統會使用要求存取之執行緒 的主要存取權杖 。 不過,如果執行緒正在模擬另一個使用者,系統就會使用執行緒的 模擬權杖。
系統會依序檢查每個 ACE,直到發生下列其中一個事件為止:
- 拒絕存取的 ACE 會明確拒絕執行緒存取權杖中所列其中一個信任項的任何要求 存取權限 。
- 執行緒存取權杖中所列的一或多個允許存取 ACE 會明確授與所有要求的存取權限。
- 已檢查所有 ACE,而且至少有一個未明確允許的要求存取權限,在此情況下,會隱含拒絕存取權。
下圖顯示物件的 DACL 如何允許存取某個執行緒,同時拒絕存取另一個執行緒。
針對執行緒 A,系統會讀取 ACE 1 並立即拒絕存取,因為拒絕存取的 ACE 會套用至執行緒存取權杖中的使用者。 在此情況下,系統不會檢查 ACE 2 和 3。 針對執行緒 B,ACE 1 不適用,因此系統會繼續前往 ACE 2,允許寫入存取,而 ACE 3 則允許讀取和執行存取。
由於系統會在明確授與或拒絕要求存取權時停止檢查 ACE,因此 DACL 中的 ACE 順序很重要。 請注意,如果範例中的 ACE 順序不同,系統可能會授與執行緒 A 的存取權。針對系統物件,作業系統會在 DACL 中定義 ACE 的慣用順序。