我正在尝试仅向管理员分配权限,并拒绝其他非管理员用户的访问权限。以下是代码 -
DirectoryInfo di = new DirectoryInfo(@"C:\C00");
DirectorySecurity dirSec = di.GetAccessControl();
dirSec.SetAccessRuleProtection(true, false);
SecurityIdentifier systemSid = new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
NTAccount systemAccount = (NTAccount)systemSid.Translate(typeof(NTAccount));
SecurityIdentifier adminSid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
NTAccount adminAccount = (NTAccount)adminSid.Translate(typeof(NTAccount));
SecurityIdentifier userSid = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
NTAccount userAccount = (NTAccount)userSid.Translate(typeof(NTAccount));
//access rule 1
dirSec.AddAccessRule(new FileSystemAccessRule(systemAccount, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 2
dirSec.AddAccessRule(new FileSystemAccessRule(adminAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
//access rule 3
dirSec.AddAccessRule(new FileSystemAccessRule(userAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Deny));
di.SetAccessControl(dirSec);
return;
使用上面的代码,即使管理员也无法访问该文件夹,但没有注释中表示的访问规则"访问规则3"它按预期工作。任何人都可以告诉我为什么会发生这种情况?
答案 0 :(得分:0)
请参阅下图以更好地了解DACL的工作原理
当明确授予或拒绝请求的访问权限时,Windows将停止检查访问控制条目。 ACE的顺序非常重要。请注意,如果示例中的ACE顺序不同,则系统可能已授予对线程A的访问权限。
关于拒绝ACE的一些注意事项
在大多数情况下,您可以使用控制对对象的访问 允许访问的ACE;您不需要明确拒绝访问 宾语。例外情况是ACE允许访问组和您 想要拒绝访问该组的成员。为此,请放置一个 在允许访问之前,DACL中用户的访问被拒绝ACE ACE为该组织。请注意,ACE的顺序很重要 因为系统会按顺序读取ACE,直到授予访问权限 或否认。用户的访问被拒绝ACE必须首先出现;除此以外, 当系统读取组的访问允许ACE时,它将授予 访问受限用户。