如何检索组中的用户列表,包括子组中的用户?
我通常这样定义我的查询,并且这种方法无需递归检索用户即可。
DECLARE @Users TABLE
(
[Guid] UNIQUEIDENTIFIER PRIMARY KEY ,
FirstName NVARCHAR(64) ,
LastName NVARCHAR(64) ,
AccountName NVARCHAR(20) ,
PrincipalName NVARCHAR(MAX) ,
Email NVARCHAR(256) ,
UserAccountControl INT ,
[Enabled] AS CAST(CASE WHEN ( [UserAccountControl] & 2 = 0 ) THEN 1
ELSE 0
END AS BIT)
);
DECLARE @ADQuery NVARCHAR(MAX) = '
SELECT displayName, mail, objectguid, givenname, sn, userprincipalname, sAMAccountName, whenCreated, userAccountControl
FROM ''''LDAP://DC=Company,DC=COM''''
WHERE objectClass = ''''User'''' AND
objectCategory = ''''Person'''' AND
memberof= ''''CN=GroupName,OU=Distribution Groups,DC=Company,DC=COM''''';
PRINT @ADQuery
DECLARE @Query NVARCHAR(MAX) = '
SELECT objectguid, givenname, sn,sAMAccountName, userprincipalname,mail, userAccountControl FROM OpenQuery (ADSI,'
+ '''' + @ADQuery + '''' + ')';
PRINT @Query
INSERT INTO @Users
( Guid ,
FirstName ,
LastName ,
AccountName ,
PrincipalName ,
Email ,
UserAccountControl
)
EXECUTE ( @Query
);
SELECT * FROM @Users
根据我的研究,使用此过滤器可以使用户进入带有查询的子组:
(memberOf:1.2.840.113556.1.4.1941:=CN=GroupName,DC=Company,DC=COM)
这不起作用。 SQL OpenQuery返回一个错误,指出在准备查询时发生了错误。基于此,撇号似乎是问题所在。
当我在where子句中简单地执行memberof = ''''CN=GroupName,OU=Distribution Groups,DC=Company,DC=COM'''''
时,一切正常。
递归搜索使用memberOf:1.2.840.113556.1.4.1941:=CN=GroupName,DC=Company,DC=COM
,但我不确定如何使有关撇号的SQL查询正常工作。
有什么想法吗?