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
- 通用并且与用户在同一个 AD 林中,或者
- 全球并且在同一个域中。
如果组的组范围为全局并且位于另一个域(即使在同一个林中),则组不会添加到 memberOf
。
最重要的是,memberOf
将仅包括来自您从中检索结果的服务器的同一域的域本地组。 (如果您在多域环境中工作并从全局目录读取,这可能与用户所在的域不同)
它也不会报告用户的主要群组(通常是 Domain Users
),如果这对您很重要,它也不会包括外部受信任域上的群组。
查找组中所有成员的最可靠方法是读取组本身的 member
属性。但是,如果该组被用作任何用户的主要组,那么您还必须 use a different way 才能找到这些用户。
我正在通过名为 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
的有效权限包括 "Read all properties" 成员可查询和不可查询的组。
可查询组和不可查询组之间的区别是什么?
你没有描述它工作不正常的意思,所以我只能猜测。但我能看到的最明显的事情是您正在使用 memberOf
查询组的成员资格。根据您的环境设置方式,这可能无法为您提供您希望的所有结果。我 wrote about this,但这是重要的部分:
组只有在组范围为:
时才会添加到memberOf
- 通用并且与用户在同一个 AD 林中,或者
- 全球并且在同一个域中。
如果组的组范围为全局并且位于另一个域(即使在同一个林中),则组不会添加到 memberOf
。
最重要的是,memberOf
将仅包括来自您从中检索结果的服务器的同一域的域本地组。 (如果您在多域环境中工作并从全局目录读取,这可能与用户所在的域不同)
它也不会报告用户的主要群组(通常是 Domain Users
),如果这对您很重要,它也不会包括外部受信任域上的群组。
查找组中所有成员的最可靠方法是读取组本身的 member
属性。但是,如果该组被用作任何用户的主要组,那么您还必须 use a different way 才能找到这些用户。