【问题标题】:Active Directory. Work with DACL活动目录。使用 DACL
【发布时间】:2012-02-23 05:09:19
【问题描述】:

我正在尝试制作自己的静态类来使用 AD。 我写了一个静态方法:

    public static void AddReadingAceForGroup(DirectoryEntry dirEntry, string groupName)
    {
        dirEntry.RefreshCache();
        DirectoryEntry root = new DirectoryEntry("LDAP://192.168.1.1/       dc=mydomain,dc=ru");
        using (DirectorySearcher ds = new DirectorySearcher(root, "CN="+groupName))
        {
            SearchResult sr = ds.FindOne();
            root = sr.GetDirectoryEntry();
        }
        try
        {
            ActiveDirectoryAccessRule accessRule =
                new ActiveDirectoryAccessRule(root.ObjectSecurity.GetGroup(typeof(SecurityIdentifier)),
                                              ActiveDirectoryRights.GenericRead, AccessControlType.Allow);
            dirEntry.ObjectSecurity.AddAccessRule(accessRule);
            dirEntry.CommitChanges();
        }
        catch(Exception e)
        {
        }
    }

在使用此功能之前,我使用远程凭据模拟用户,然后代码正常工作,但没有结果。删除 ACE 的类似功能工作正常。

【问题讨论】:

    标签: c# active-directory dacl


    【解决方案1】:

    最终的工作代码是:

    public static SecurityIdentifier GetGroupSid(string groupName, string domainControllerIp)
    {
        SecurityIdentifier sid = null;
        using (PrincipalContext dcx = new PrincipalContext(ContextType.Domain, domainControllerIp))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(dcx, groupName);
            if (group != null)
            {
                sid = group.Sid;
                group.Dispose();
            }
        }
        return sid;
    }
    public static void AddDaclsAceForGroup(DirectoryEntry dirEntry, string groupName, string ip)
    {
        SecurityIdentifier sid = GetGroupSid(groupName,ip);
        try
        {
            ActiveDirectoryAccessRule accessRule =
                new ActiveDirectoryAccessRule(sid,ActiveDirectoryRights.GenericRead, AccessControlType.Allow);
            dirEntry.ObjectSecurity.AddAccessRule(accessRule);
            dirEntry.CommitChanges();
        }
        catch(Exception e)
        {
        }
    }
    

    我刚刚遇到了组 SID 错误。代码运行完美,但不是我所期望的。 对不起我的英语不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2017-03-14
      • 1970-01-01
      相关资源
      最近更新 更多