Sql Active Directory-获取用户和组,特定组的成员

Sql Active Directory-获取用户和组,特定组的成员,sql,sql-server-2008,active-directory,active-directory-group,Sql,Sql Server 2008,Active Directory,Active Directory Group,首先,我需要在SQL Server中检索属于特定组的用户列表。我确实在网上找到了一些东西,它工作得很好。解决方案如下所示: CREATE PROCEDURE [dbo].[NES_GetADGroupMembers] (@groupName VARCHAR(max)) AS BEGIN CREATE TABLE #MemberOfGroups ( groupName varchar(400), cn varchar(400),

首先,我需要在SQL Server中检索属于特定组的用户列表。我确实在网上找到了一些东西,它工作得很好。解决方案如下所示:

CREATE PROCEDURE [dbo].[NES_GetADGroupMembers]
    (@groupName VARCHAR(max))
AS 
BEGIN
    CREATE TABLE #MemberOfGroups
    (
         groupName varchar(400),
         cn varchar(400),
         displayName varchar(400)
    )

    SET NOCOUNT ON

    DECLARE @t varchar(100), @t2 varchar(1000), 
            @ot varchar (4000), @tt varchar (4000);

    DECLARE gC CURSOR FOR
        SELECT cn, distinguishedName
        FROM openquery (ADSI, 'SELECT cn, distinguishedName
                               FROM ''''LDAP://Mydomaindomain/CN=users,DC=Mydomain,DC=com''''
                               WHERE objectCategory = ''group''')

    OPEN gC

    FETCH NEXT FROM gC INTO @t, @t2

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @ot = '''SELECT cn, displayName
                   FROM ''''LDAP://Mydomaindomain/CN=users,DC=Mydomain,DC=com'''' 
                   WHERE objectCategory = ''''Person'''' AND objectClass = ''''user''''
                     AND memberOf=''''' + @t2 + '''''';

       SET @tt = 'select '+ ''''+@t+'''' +' As groupName, cn, displayName from openquery(ADSI,'+ @ot +''') order by cn'

       INSERT INTO #MemberOfGroups (groupName, cn, displayName)
           EXEC (@tt) 

       FETCH NEXT FROM gC INTO @t, @t2
    END

    CLOSE gC
    DEALLOCATE gC

    SELECT 
        groupName, displayName 
    FROM
        #MemberOfGroups
目前,它只是工作正常,返回输入组的用户

然而,我有一个新的请求,即一个组可以有其他“组”作为成员,就像用户一样

我尝试在WHERE条件中更新我的过滤器,以包括
objectClass=''组'
,但它不起作用


任何人都知道这些查询,并且可以帮助我检索组(输入组的成员)?

我假设您的组在用户的OU(文件夹)中?我的广告设置在称为SecurityGroups的单独CN中有组。从技术上讲,你可以做到:

选择cn,成员
来自“LDAP://Mydomaindomain/CN=,DC=Mydomain,DC=com”


as
member
将为您提供该组所有成员的DN。然后就有了成员数组,只需将这些成员与其对应的用户(或组!)对象进行匹配。因为这基本上返回一个DNs的关联数组,所以您可以筛选组对象并嵌套一个查询,以便再次为这些组的成员运行该查询。

使用
成员
会导致以下错误<代码>无法从链接服务器“ADSI”的OLE DB提供程序“ADsDSOObject”获取行的数据。由于符号不匹配或溢出以外的原因,无法转换数据值
我认为您的问题在于过滤器-去掉ObjectCategory=Person,因为“group”可能不是Person,然后看看您是否得到了答案。我尝试删除它,并添加了一个带有group的
语句,但没有成功。