Share via


ACL 技術架構

System.Security.AccessControl 命名空間透過便利的類別提供存取控制清單的存取權限,這些類別會抽掉大部分 Windows ACL 安全性系統的複雜性。 此外,System.Security.AccessControl 命名空間包含幾個提供進階存取 Windows ACL 安全性系統的類別。

.NET Framework 為下列資源提供 ACL 的存取:

  • 加密金鑰

  • 目錄

  • 事件等候處理常式

  • 檔案

  • Mutex

  • 登錄機碼

  • 號誌

這些資源每一種都有幾個您可用來建立及修改 ACL 的類別。

ACL 類別的階層架構

在大部分情況下,您可以使用較高階的抽象類別來代替進階類別,以建立及修改 ACL。 每一種資源的較高階類別的形式如下:

  • 封裝 Discretionary 存取控制清單 (DACL) 和系統存取控制清單 (SACL) 的類別。 此類別會使用 <Resource Name>Security 的名稱。 例如,FileSecurityDirectorySecurity 類別封裝檔案和資料夾的 DACL 和 SACL。

  • 封裝存取控制項目 (ACE) 的類別。 此類別會使用 <Resource Name>AccessRule 的名稱。

  • 封裝稽核 ACE 的類別。 此類別會使用 <Resource Name>AuditRule 的名稱。

  • 讓您建立明確之存取和稽核規則的幾個列舉型別。

  • 如需完整的高階 ACL 類別清單,請參閱 ACL 技術摘要

加入 ACE 至 ACL

使用其中一個存取規則或稽核規則類別建立 ACE 之後,您可以將規則加入至資源,或是使用它移除資源中的現有規則。 例如,您可能使用 FileSystemAccessRule 類別,其指定只有系統管理員能夠開啟檔案,以建立規則。 然後可以再將該規則加入至 FileSecurity 物件,或是從 FileSecurity 物件移除類似的規則。

加入授予存取的 ACE 並不保證主體就會有存取權限,因為拒絕規則永遠都會取代允許規則。 例如,如果加入系統帳戶對檔案的允許存取規則,這並不表示此人員會有存取權限,因為可能會有另一條規則拒絕他存取檔案。

每一個與資源相關聯的 <Resource Name>Security 物件都提供下列方法,可加入或移除存取規則和稽核規則。

方法

說明

AddAccessRule

-和-

AddAuditRule

搜尋可以與新規則合併的存取或稽核規則。 如果找不到,就加入新規則。

SetAccessRule

移除與所指定規則有相同使用者和 AccessControlType 值 (Allow 或 Deny) 的所有存取控制規則,然後再加入所指定的規則。

SetAuditRule

移除與所指定規則有相同使用者的所有稽核規則,不管 AuditFlags 值為何,然後再加入所指定的規則。

ResetAccessRule

移除與所指定規則有相同使用者的所有存取控制規則,不管 AccessControlType 值為何,然後再加入所指定的規則。

RemoveAccessRule

搜尋與所指定規則有相同使用者和 AccessControlType 值 (Allow 或 Deny),以及有相容繼承和傳用旗標的存取控制規則。 找到以後,就從規則中移除指定之存取規則中所包含的權限。

RemoveAuditRule

搜尋與所指定規則有相同使用者,以及有相容繼承和傳用旗標的存取控制規則。 找到以後,就從規則中移除指定之規則中所包含的權限。

RemoveAccessRuleAll

搜尋與所指定規則有相同使用者和 AccessControlType 值 (Allow 或 Deny) 的所有存取規則,找到以後將其移除。

RemoveAuditRuleAll

搜尋與所指定規則有相同使用者的所有稽核規則,找到以後將其移除。

RemoveAccessRuleSpecific

-和-

RemoveAuditRuleSpecific

搜尋與所指定規則完全相符的存取或稽核規則,找到以後將其移除。

AddAccessRule

-和-

AddAuditRule

搜尋可以與新規則合併的存取或稽核規則。 如果找不到,就加入新規則。

取得和設定 ACL

每一種受保護的資源都有方法可取得及設定與資源相關聯的 <Resource Name>Security 物件。 若要擷取所指定資源的現有 ACL,請使用與資源相關聯的其中一個 GetAccessControl 方法。 若要將變更傳送回資源,請使用與資源相關聯的其中一個 SetAccesscontrol 方法。 請注意,在您重新以其中一個 set 方法明確套用之前,變更不會傳送回資源。

如需每一種受保護資源的完整 get 和 set 方法清單,請參閱 ACL 技術摘要

請參閱

其他資源

ACL 技術概觀

.NET Framework 中的安全性