共用方式為


可繼承 ACE 的自動傳播

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

直接套用的 ACE 優先順序高於繼承的 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