Как кто-то ограничивает права на чтение определенных пользовательских атрибутов в Active Directory?
Мы используем этот код для запроса экземпляра 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:
add key = "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 и многие другие атрибуты, которые нам нужны для нашей программы.
Я нашел здесь, что:
Если вы не укажете список атрибутов, поиск вернет значения для всех атрибутов, разрешенных набором управления доступом в каталоге.
Итак, мой вопрос... где установлен этот контроль доступа и как мы можем изменить его, чтобы иметь доступ к этим атрибутам?
3 ответа
Используйте ADSIEdit, вы можете разбить вещи, так что будьте осторожны. http://technet.microsoft.com/en-us/library/cc773354%28WS.10%29.aspx)
Мне никогда не приходилось заходить так глубоко, это немного похоронено. Вы открываете ADSIEdit и попадаете на объект, на который хотите посмотреть (или на весь контейнер /OU), щелкаете правой кнопкой мыши и переходите к "свойствам".
Нажмите на вкладку безопасности, нажмите кнопку "Дополнительно", нажмите "Изменить", чтобы посмотреть, что вы можете сделать (пока не вносите никаких изменений). Вы увидите стандартные разрешения, такие как "Полный доступ" или "Изменить владельца" и выше, где применяется "Только этот объект"
Есть еще одна вкладка "Свойства", где вы находитесь - где все вкусности. "Чтение бизнес-ролей" и "Чтение адресов прокси" и тому подобное.
Вы можете добавить новую группу, поставить галочки там, где вам нравится, чтобы она применялась ко всему контейнеру или OU, и вы должны быть готовы.
Это действительно функция двух вещей:
Пользовательский контекст, в котором выполняется запрос.
ТУЗ на объект (ы) читаются.
Мой вопрос к вам - в каком пользовательском контексте выполняется запрос?
Прошедшие проверку пользователи должны иметь возможность читать все свойства, если я не ошибаюсь.
Кроме того, вы должны иметь возможность облегчить это с помощью мастера делегирования управления, а также с помощью ADSIEdit.
http://support.microsoft.com/kb/281146
Это эквивалент командной строки для вкладки "Безопасность" в оснастке Windows Active Directory, такой как "Пользователи и компьютеры Active Directory" и "Сайты и службы Active Directory".
Синтаксис интересен для изучения, но я смог успешно запретить доступ в среде песочницы с помощью ADAM с помощью командной строки ADAM с:
dsacls "\ localhost \ OU =имя,OU=имя_2,DC= имядомена,DC= имядомена2" / d домен \ группа: GR
/ d запрещает домен \ группу GR (общее чтение), которая включает в себя множество свойств, таких как proxyAddresses, street и многие другие. Мне нужно попросить их предоставить группе root права на членство GR или сделать меня другим пользователем или что-то в этом роде. В любом случае, мы поняли это.