【问题标题】:Active Directory - Get users and groups, member of a particular groupActive Directory - 获取用户和组,特定组的成员
【发布时间】:2017-06-01 12:30:55
【问题描述】:

首先,我需要在 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 = ''group'',但它不起作用。

任何人都对这些查询有所了解并可以帮助我检索组(输入组的成员)吗?

【问题讨论】:

  • 我认为您的问题与过滤器有关 - 取出 ObjectCategory=Person,因为“组”可能不是人,然后看看您是否得到答案。
  • 我尝试删除它并添加一个OR 声明与组,但徒劳无功。

标签: sql sql-server-2008 active-directory active-directory-group


【解决方案1】:

我假设您的组位于用户的 OU(文件夹)中?我的 AD 设置在名为 SecurityGroups 的单独 CN 中有组。从技术上讲,您可以这样做:

SELECT cn, member FROM ''''LDAP://Mydomaindomain/CN=<actual OU of groups?>,DC=Mydomain,DC=com''''

member 将为您提供该组所有成员的 DN。然后,您拥有成员数组,只需将它们与相应的用户(或组!)对象相匹配。因为这实际上返回了一个关联的 DN 数组,所以您可以过滤组对象并嵌套查询以再次为这些对象的成员运行该查询。

【讨论】:

  • 使用member 会出现以下错误; Cannot get the data of the row from the OLE DB provider "ADsDSOObject" for linked server "ADSI". Could not convert the data value due to reasons other than sign mismatch or overflow.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多