ACL 技術架構
System.Security.AccessControl 命名空間透過便利的類別提供存取控制清單的存取權限,這些類別會抽掉大部分 Windows ACL 安全性系統的複雜性。此外,System.Security.AccessControl 命名空間包含幾個提供進階存取 Windows ACL 安全性系統的類別。
.NET Framework 為下列資源提供 ACL 的存取:
加密金鑰
目錄
事件等候處理常式
檔案
Mutex
登錄機碼
號誌
這些資源每一種都有幾個您可用來建立及修改 ACL 的類別。
ACL 類別的階層架構
在大部分情況下,您可以使用較高階的抽象類別來代替進階類別,以建立及修改 ACL。每一種資源的較高階類別的形式如下:
封裝 Discretionary 存取控制清單 (DACL) 和系統存取控制清單 (SACL) 的類別。此類別會使用 <Resource Name>Security的名稱。例如,FileSecurity 和 DirectorySecurity 類別封裝檔案和資料夾的 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 技術摘要。