LDAP查询-按组获取用户(递归)

时间:2018-07-30 19:55:42

标签: sql tsql active-directory ldap openquery

如何检索组中的用户列表,包括子组中的用户?

我通常这样定义我的查询,并且这种方法无需递归检索用户即可。

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查询正常工作。

有什么想法吗?

0 个答案:

没有答案