SQL 服务器:Active Directory 组成员的 LDAP 查询工作不一致

SQL Server: LDAP query of Active Directory Group members works inconsistently

我正在通过名为 LDAP.

的链接服务器从 SQL 服务器查询 Active Directory

链接服务器由此创建,通过专门创建的服务帐户进行身份验证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 的有效权限包括 "Read all properties" 成员可查询和不可查询的组。

可查询组和不可查询组之间的区别是什么?

你没有描述它工作不正常的意思,所以我只能猜测。但我能看到的最明显的事情是您正在使用 memberOf 查询组的成员资格。根据您的环境设置方式,这可能无法为您提供您希望的所有结果。我 wrote about this,但这是重要的部分:

组只有在组范围为:

时才会添加到 memberOf
  1. 通用并且与用户在同一个 AD 林中,或者
  2. 全球并且在同一个域中。

如果组的组范围为全局并且位于另一个域(即使在同一个林中),则组不会添加到 memberOf

最重要的是,memberOf 将仅包括来自您从中检索结果的服务器的同一域的域本地组。 (如果您在多域环境中工作并从全局目录读取,这可能与用户所在的域不同)

它也不会报告用户的主要群组(通常是 Domain Users),如果这对您很重要,它也不会包括外部受信任域上的群组。

查找组中所有成员的最可靠方法是读取组本身的 member 属性。但是,如果该组被用作任何用户的主要组,那么您还必须 use a different way 才能找到这些用户。