Share via


可繼承 ACE 的自動傳播

SetNamedSecurityInfoSetSecurityInfo函式支援 (ACE) 可繼承存取控制專案的自動傳播。 例如,如果您使用這些函式將可繼承的 ACE 新增至 NTFS 中的目錄,則系統會將 ACE 套用至任何現有子目錄或檔案的 存取控制清單 (ACL) 。

直接套用 ACE 的優先順序高於繼承的 ACE。 系統會在 DACL () 的任意存取控制清單中 ,將直接套用的 ACE 放在繼承的 ACE 之前,藉此實作此優先順序。 當您呼叫 SetNamedSecurityInfoSetSecurityInfo 函式來設定物件的安全性資訊時,系統會在目標物件下方階層中所有物件的 ACL 上強制執行目前的繼承模型。 對於已轉換成目前繼承模型的物件,SE_DACL_AUTO_INHERITED和SE_SACL_AUTO_INHERITED位會設定在物件 之安全描述元 的控制欄位中。

當您建置反映目前繼承模型的新安全性描述元時,請小心不要變更安全性描述元的語意。 因此,不允許和拒絕 ACE 永遠不會彼此相對移動。 如果需要這類移動 (,例如將所有非內含 ACE 放在 ACL) 前端,則 ACL 會標示為受保護,以防止語意變更。

將繼承的 ACE 傳播至子物件時,系統會使用下列規則:

  • 如果沒有 DACL 的子物件繼承 ACE,則結果是包含僅包含繼承 ACE 之 DACL 的子物件。
  • 如果具有空 DACL 的子物件繼承了 ACE,則結果是包含僅包含繼承 ACE 之 DACL 的子物件。
  • 如果您從父物件中移除可繼承的 ACE,則自動繼承會移除子物件所繼承之 ACE 的任何複本。
  • 如果自動繼承會導致從子物件的 DACL 移除所有 ACE,則子物件會有空的 DACL,而不是沒有 DACL。

這些規則可能會有非預期的結果,可將沒有 DACL 的物件轉換成具有空白 DACL 的物件。 沒有 DACL 的物件允許完整存取,但具有空白 DACL 的物件不允許存取。 例如,這些規則如何建立空的 DACL,假設您將可繼承的 ACE 新增至物件樹狀結構的根物件。 自動繼承會將可繼承的 ACE 傳播至樹狀結構中的所有物件。 以無 DACL 開頭的子物件現在具有具有繼承 ACE 的 DACL。 如果您從根物件移除可繼承的 ACE,系統會自動將變更傳播至子物件。 從沒有 DACL 開始的子物件 (允許完整存取) 現在會有空的 DACL (不允許存取) 。

若要確保沒有 DACL 的子物件不會受到可繼承 ACE 的影響,請在 物件的安全性描述元中設定SE_DACL_PROTECTED旗標。

如需如何正確建立 DACL 的資訊,請參閱 建立 DACL