前三節著重 DACL (存取控制清單),本節轉向 SACL (系統存取控制清單) —— 控制「誰在何時對何物件嘗試何種存取」被記錄進安全性事件日誌。稽核屬高敏感操作,需 本地安全性原則 → 稽核原則 → 稽核物件存取** 啟用,且程式碼執行身分需具備 「安全性權限」 (SeSecurityPrivilege)**。
using (FileStream file = new FileStream(
@"M:\temp\sample.txt", FileMode.Open, FileAccess.ReadWrite)) {
FileSecurity security = file.GetAccessControl();
var rule = new FileSystemAuditRule(
new NTAccount(@"FABRIKAM\Full_Time_Employees"),
FileSystemRights.Write,
AuditFlags.Failure); // 僅稽核失敗
security.AddAuditRule(rule);
file.SetAccessControl(security);
}
| 參數 | 說明 |
|---|---|
| IdentityReference | 被稽核主體 (使用者/群組) |
| FileSystemRights | 關注的存取權限 (Read、Write、FullControl 等) |
| AuditFlags | Success、Failure、Success | Failure |
| InheritanceFlags / PropagationFlags | 同 DACL 繼承機制,控制子物件是否套用 |
secpol.msc (本地安全性原則)gpupdate /force 套用UnauthorizedAccessException,檢查執行身分是否具備 SeSecurityPrivilege (本地原則 → 使用者權利指派 → 管理稽核與安全性記錄)eventvwr.msc → Windows Logs → Security) 記錄 Event ID 4656 (存取嘗試)、4663 (物件存取)最佳實務:生產環境建議「失敗稽核」為主,「成功稽核」僅針對高敏感資料,避免日誌暴增影響效能與分析。
本文部分內容改編自《.NET 安全揭秘》
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/