SQL Server: LDAP-запрос членов группы Active Directory работает противоречиво - PullRequest
0 голосов
/ 05 октября 2019

Я запрашиваю Active Directory из SQL Server через связанный сервер с именем LDAP.

Связанный сервер был создан таким образом, проходя аутентификацию через специально созданную учетную запись службы myDomain\ServiceAccountWithNoPermissions.

exec master.dbo.sp_addlinkedserver @server = N'LDAP', @srvproduct=N'Active Directory Service Interfaces', @provider=N'ADSDSOObject', @datasrc=N'adsdatasource'
exec master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LDAP',@useself=N'False',@locallogin=NULL,@rmtuser=N'myDomain\ServiceAccountWithNoPermissions',@rmtpassword='########'

И я опрашиваю членов определенной группы Active Directory следующим образом:

select *
from OpenQuery (LDAP, '
                select objectGUID, sAMAccountName
                from ''LDAP://myServer.myDomain.com/DC=myDomain,DC=com'' 
                where MemberOf=''CN=Some Group,OU=Folder,DC=myDomain,DC=com''
                order by sAMAccountName asc 
');

Вот моя проблема. Вышеуказанная система работает правильно для некоторых групп Active Directory, а не других.

По умолчанию я думаю, что Authenticated Users должен иметь возможность запрашивать любые объекты пользователя или группы в Active Directory. И в качестве теста я проверил, что действующие разрешения myDomain\ServiceAccountWithNoPermissions включают «Чтение всех свойств» в группах, для которых члены могут запрашивать и не запрашивать.

В чем может быть разница между группами, в которых можно выполнять запросыи без запроса?

1 Ответ

1 голос
/ 05 октября 2019

Вы не описали, что вы подразумеваете под неправильной работой, поэтому я могу только догадываться. Но самое очевидное, что я вижу, это то, что вы запрашиваете членство в группе, используя memberOf. В зависимости от того, как настроена ваша среда, это может не дать вам тех результатов, на которые вы надеетесь. Я написал об этом , но вот важная часть:

Группы добавляются в memberOf, только если у них есть область действия группы:

  1. Universal и находятся в том же лесу AD, что и пользователь, или
  2. Global и находятся в одном домене.

Группы не получаютдобавляется к memberOf, если они имеют глобальную область действия группы и находятся в другом домене (даже если в том же лесу).

Кроме того, memberOf будет включать только локальные группы домена из того жедомен сервера, с которого вы получаете результаты. (если вы работаете в многодоменной среде и читаете из глобального каталога, это может быть не тот домен, из которого пользователь)

Он также не будет сообщать об основной группе пользователя (обычно Domain Users), если это важно для вас, и при этом оно не будет включать группы на внешних доверенных доменах.

Самый надежный способ найти всех членов группы - это прочитать атрибут member самой группы. Но если группа используется в качестве основной группы для каких-либо пользователей, вам также придется использовать другой способ , чтобы найти их.

...