LDAP查询不显示某些用户

时间:2011-12-07 17:21:50

标签: c# active-directory ldap

我无法从LDAP显示某些用户。我不知道为什么。这是我的代码

        try
        {

            string path = "LDAP://" + Program.domain;

            DirectoryEntry dEntry = new DirectoryEntry(path);


            DirectorySearcher dSearcher = new DirectorySearcher(dEntry);

            dSearcher.Filter = "(&(objectClass=user)(objectCategory=person))";

            //perform search on active directory
            sResults = dSearcher.FindAll();


            //loop through results of search
            foreach (SearchResult searchResult in sResults)
            {
                //string view = searchResult.Properties["samaccountname"][0].ToString();
                // Console.WriteLine(searchResult.Properties["userprincipalname"][0].ToString());

                if (searchResult.Properties["samaccountname"][0].ToString() == Program.username)
                {
                    Console.WriteLine("**********UserDetails******************");
                        foreach (Object propertyName in searchResult.Properties.PropertyNames)
                        {
                            ResultPropertyValueCollection valueCollection =
                                searchResult.Properties[(string)propertyName];


                            foreach (Object propertyvalue in valueCollection)
                            {
                                Console.WriteLine((string)propertyName + " : " + propertyvalue);

                                result = true;

                            }


                        }
                        Console.WriteLine("************************************");

                    }

                }

这显示的用户很少,但AD中存在的其他用户很少。 他们也是域管理员和域用户。我还没有看到任何许可问题...... 我真的需要一些帮助。有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

有两个可能的原因:

0)访问控制:您没有适当的访问级别来查看有问题的对象(或者在过滤器中匹配它们所需的属性(无论是objectClass还是objectCategory))

1)有问题的目标对象实际上与指定的过滤器不匹配。用户可以是(&(objectClass=user)(objectCategory=person))以外的其他用户。

我的建议是按如下方式解决问题:

0)取一个您希望匹配的样本用户并仔细检查。检查以确保objectClass确实包含user和objectCategory设置为person。如果没有,请修改您的查询以包含您尝试查找的所有用户。 (您可以参考AD模式来查看这些事物之间的关系)

1)确保您正在进行查询的上下文可以访问您要查找的所有对象,包括您在过滤器中使用的属性。如果您无权访问过滤器中的所有属性,则AD不会返回查询匹配...如果确实如此,则它将是信息泄露的一种形式。