Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查ActiveDirectory对象的授权_C#_.net_Security_Active Directory_Authorization - Fatal编程技术网

C# 检查ActiveDirectory对象的授权

C# 检查ActiveDirectory对象的授权,c#,.net,security,active-directory,authorization,C#,.net,Security,Active Directory,Authorization,我想测试任意用户是否具有对特定Active Directory对象属性的写入权限。我认为解决方案的一部分似乎是: NTAccount Account = new NTAccount("Domain\\XYZ"); SecurityIdentifier Sid = (SecurityIdentifier)Account.Translate(typeof(SecurityIdentifier)); 这似乎允许我从用户的字符串表示中获得具体的表示。我认为另一个难题是: string strMembe

我想测试任意用户是否具有对特定Active Directory对象属性的写入权限。我认为解决方案的一部分似乎是:

NTAccount Account = new NTAccount("Domain\\XYZ");
SecurityIdentifier Sid =
(SecurityIdentifier)Account.Translate(typeof(SecurityIdentifier));
这似乎允许我从用户的字符串表示中获得具体的表示。我认为另一个难题是:

string strMemberString = "LDAP://OU=Test,DC=Domain,DC=local";
DirectoryEntry computers = new DirectoryEntry();
computers.Path = strMemberString;
computers.Options.SecurityMasks = SecurityMasks.Owner | SecurityMasks.Group
| SecurityMasks.Dacl | SecurityMasks.Sacl;

foreach (DirectoryEntry computer in computers.Children)
{
   if (computer.Name == "CN=Test")
   {
      ActiveDirectorySecurity sdc = computer.ObjectSecurity;
      //...
不知道从那里去哪里。我怎么完成这个?有没有一种完全不同的方式我应该追求?我正在使用.NET4.0


我希望解决方案完全是BCL代码,而不是PInvoke或WMI。

我认为最好的方法是寻找一个类,该类提供有效权限,如AD对象的“安全”选项卡中的“高级”对话框选项卡所示:

它还存在一个名为“随心所欲”的命令行工具

编辑 要查找用户所属的组,您可以

写一个递归查询程序,在大的组织中性能很差

在\u链中使用名为LDAP\u matching\u rule\u的特殊匹配规则请参见。我举一个例子。它也有点长,但据我所知,这是检索安全和分发组的唯一方法

使用属性。它是一个计算属性,包含用户所属的每个安全组(包括间接组)的ID。我认为这是您可以使用的方法,该方法在System.DirectoryServices.AccountManagement命名空间中提供,并在.Net 3.5中介绍


您需要检查allowedAttributesEffective属性

您是否意识到,拥有对特定Active Directory对象属性的写访问权限可能是由于属于某个组或属于某个组的组等原因造成的?@JPBlanc:是的,我知道。那项工作应该由BCL替我处理。我只需要了解使用情况。我编辑了我的答案,你会发现有一种方法可以检索用户正在寻找的安全组。我正在寻找一种编程解决方案,而不是管理解决方案,但无论如何,谢谢你。是可以在object上修改的属性列表,我认为他正在寻找属性上的ACL。