#sql-server #active-directory
#sql-сервер #active-directory
Вопрос:
Я хочу присоединить идентификатор guid подразделения (фильтрующий objectClass = «organizationalunit») к организации пользователя (фильтрующий objectClass = «User»)… Я не вижу соответствующего кода (идентификатор guid подразделения в атрибутах пользователей из AD) для сопоставления с набором данных, в котором у меня есть все подразделения objectClass = «organizationalunit»)
-- dataset to get all OUs --I have an OU ObjectGUId here! it looks ok.
select *
FROM OPENQUERY([ADSI],
'SELECT
Name, ADsPath,objectguid , parentguid
FROM ''myLDAP path''
WHERE
objectClass = ''organizationalunit''
')
AS t
-- dataset to get users attributes--I do not see an OU ObjectGUId related to users OU structure
-- I checked here but no luck http://www.kouti.com/tables/userattributes.htm
select *
FROM OPENQUERY([ADSI],
'SELECT
userPrincipalName,ADsPath,
Name,
displayName,
objectCategory,
SN,
givenName,
ST,
SamAccountName,
DistinguishedName,
ObjectGUID,
physicalDeliveryOfficeName,
department,
ObjectSID,
mail ,preferredOU , ou ,o
FROM ''myLDAP path''
WHERE
objectClass = ''User''
')
Ответ №1:
Если я правильно понял ваш вопрос, вы хотите объединить список пользователей с подразделением, в котором они находятся.
Active Directory представляет собой древовидную структуру, а DistinguishedName — это путь, который описывает, где находится объект.
Таким образом, чтобы перейти от объекта к контейнеру, в котором находится этот объект, вы удаляете первый элемент DistinguishedName, который разделяется запятыми.
Таким образом, пользователь с различимым именем cn=user, ou= container, dc= domain, dc= local находится в организационном подразделении ou=container, dc= domain, dc= local
Таким образом, решение представляет собой что-то более или менее похожее на SELECT RIGHT(distinctedname, CHARINDEX(«,», DistinguishedName) 1) от пользователей, которые затем присоединяются к organizationalUnits distinctedname .
Объекты не связаны через objectGUIDs, как вы предлагаете.
Извините, я не могу предложить вам прямой рабочий SQL-код, вы, вероятно, в этом лучше, чем я 😉
Комментарии:
1. хорошо, спасибо, Ларс. Правильно.. Я искал атрибут guid пользователя ou, но, похоже, он не существует. Я сделал что-то подобное, как вы предложили. Спасибо.