using System.Security.AccessControl; using System.IO; using System.Security.Principal;
取得目录的访问控制和审核安全(ACL)
DirectorySecurity fileAcl = Directory.GetAccessControl(filePath);
文件夹权限继承控制
fileAcl.SetAccessRuleProtection(true, true);//取消权限继承,且保留继承的访问规则 fileAcl.SetAccessRuleProtection(true, true);//取消权限继承,且移除继承的访问规则 fileAcl.SetAccessRuleProtection(false, true);//允许权限继承,且忽略第二个参数
访问规则访问控制项创建
FileSystemAccessRule everyoneRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow); FileSystemAccessRule everyoneRule1 = new FileSystemAccessRule("Everyone", FileSystemRights.Modify, AccessControlType.Allow); //"Everyone"用户账户名称 //FileSystemRights.FullControl 访问规则 //AccessControlType.Allow 允许访问受保护对象,AccessControlType.Deny拒绝访问受保护对象
SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。
修改访问控制列表(ACL)
bool result = false; //将指定的授权规则添加到访问控制列表 (ACL)。 fileAcl.ModifyAccessRule(AccessControlModification.Add, everyoneRule,out result); //从 ACL 移除所含安全性标识符 (SID) 和访问掩码与指定授权规则一样的授权规则。 fileAcl.ModifyAccessRule(AccessControlModification.Remove, everyoneRule, out result); //从 ACL 移除所含 SID 与指定授权规则一样的授权规则。 fileAcl.ModifyAccessRule(AccessControlModification.RemoveAll, everyoneRule, out result); //从 ACL 移除与指定的授权规则完全匹配的授权规则。 fileAcl.ModifyAccessRule(AccessControlModification.RemoveSpecific, everyoneRule, out result); //从 ACL 移除所含 SID 与指定授权规则一样的授权规则,然后将指定的授权规则添加到 ACL。 fileAcl.ModifyAccessRule(AccessControlModification.Reset, everyoneRule, out result); //从 ACL 移除所有授权规则,然后将指定的授权规则添加到 ACL。 fileAcl.ModifyAccessRule(AccessControlModification.Set, everyoneRule, out result); //权限追加 fileAcl.AddAccessRule(everyoneRule); //权限删除 fileAcl.RemoveAccessRule(everyoneRule); //从当前文件或目录移除所有匹配的允许或拒绝访问控制列表 (ACL) 权限。 fileAcl.RemoveAccessRuleAll(everyoneRule); //从当前文件或目录移除指定用户的所有访问控制列表 (ACL) 权限。 fileAcl.RemoveAccessRuleSpecific(everyoneRule); //从当前文件或目录移除单个匹配的允许或拒绝访问控制列表 (ACL) 权限。
遍历ACL中的ACE
AuthorizationRuleCollection rules = fileAcl.GetAccessRules(true, true, typeof(NTAccount)); // AuthorizationRule Rule = rules[0]; foreach (FileSystemAccessRule rule in rules) { if(rule.IdentityReference.Value.CompareTo("Users")==0) { fileAcl.RemoveAccessRule(rule); } }
原文地址:https://www.cnblogs.com/cteng-common/p/fileaccess.html
时间: 2024-10-29 16:59:49