Мы используем этот код для запроса экземпляра ADAM.
DirectoryEntry adRoot = new DirectoryEntry(ConfigurationManager.AppSettings["LdapConnectionString"].ToString());
DirectorySearcher adSearch = new DirectorySearcher(adRoot);
adSearch.Filter = "(&(objectClass=user)(objectCategory=person))";
SearchResultCollection searchResults = adSearch.FindAll();
return searchResults;
Это в теге в App.config:
добавить ключ = "LdapConnectionString" value = "LDAP: //имя сервера: номер порта/ dc =доменное имя"
Мы используем код, чтобы распечатать все имена свойств, которые мы получаем из экземпляра ADAM.
DirectoryEntry entry = searchResults[0].GetDirectoryEntry();
foreach (string property in entry.Properties.PropertyNames)
{
Console.WriteLine(property);
}
PropertiesToLoad - это пустая StringCollection, PropertyNamesOnly - false.
Мы не получаем proxyAddresses, street, zipCode и многие другие атрибуты, необходимые для нашей программы.
я нашел Вот который:
Если вы не укажете список атрибутов, поиск вернет значения для всех атрибутов, разрешенных контролем доступа, установленным в каталоге.
Итак, мой вопрос ... где этот набор управления доступом и как мы можем его изменить, чтобы у нас был доступ к этим атрибутам?
Используйте ADSIEdit, вы можете сломать вещи, поэтому будьте осторожны. (http://technet.microsoft.com/en-us/library/cc773354%28WS.10%29.aspx)
Мне никогда не приходилось заходить так глубоко, это немного похоронено. Вы открываете ADSIEdit и переходите к объекту, на который хотите взглянуть (или к целому контейнеру / OU), щелкните правой кнопкой мыши и переходите к «свойствам».
Щелкните вкладку «Безопасность», нажмите кнопку «Дополнительно», нажмите «Изменить», чтобы увидеть, что вы можете сделать (пока не вносите никаких изменений). Вы увидите стандартные разрешения, такие как «Полный доступ» или «Изменить владельца» и выше, где применяется «Только этот объект».
Прямо там, где вы находитесь, есть еще одна вкладка «Свойства» - где все вкусности. «Чтение бизнес-ролей» и «Чтение адресов прокси» и тому подобное.
Вы можете добавить новую группу, установить там флажки, которые вам нравятся, применить ее ко всему контейнеру или OU, и все будет в порядке.
http://support.microsoft.com/kb/281146
Это эквивалент вкладки «Безопасность» в инструментах оснастки Windows Active Directory, таких как «Пользователи и компьютеры Active Directory», «Сайты и службы Active Directory» в командной строке.
Синтаксис интересно изучать, но я смог успешно запретить доступ в среде песочницы с ADAM, используя строку командной строки ADAM с помощью:
dsacls "\ localhost \ OU =ouname, OU =ou2name, DC =доменное имя, DC =domainname2"/ д домен \ группа: GR
/ d отрицает домен \ группа GR (общее чтение), который включает в себя множество свойств, таких как proxyAddresses, street и многие другие. Мне нужно попросить их предоставить группе root права на членство в GR или сделать меня другим пользователем или что-то в этом роде. Так или иначе, мы разобрались.
На самом деле это функция двух вещей:
Пользовательский контекст, в котором выполняется запрос.
ACE на читаемых объектах.
Мой вопрос к вам: в каком пользовательском контексте выполняется запрос?
Прошедшие проверку пользователи должны иметь возможность читать все свойства, если я не ошибаюсь.
Кроме того, вы сможете облегчить это с помощью мастера делегирования управления, а также с помощью ADSIEdit.