【问题标题】:How to get around 1000 records limit in Active Directory with T-SQL query?如何使用 T-SQL 查询在 Active Directory 中获得大约 1000 条记录限制?
【发布时间】:2012-04-15 06:31:42
【问题描述】:

如果我将光标限制在几个组中,下面的代码可以完美运行*,但如果我让它针对我们的整个域运行,我会在 AD 中遇到 1000 条记录限制。有关如何获取此分页的任何想法?

*完美,因为它应该只返回有限数量的记录,这些记录数量低于 1000 条记录的限制。

CREATE TABLE #MemberOfGroups
(
    groupName   VARCHAR (400),
    cn          VARCHAR (400),
    displayName VARCHAR (400)
);

SET NOCOUNT ON;

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

DECLARE gC CURSOR
    FOR SELECT cn,
               distinguishedName
        FROM   OPENQUERY (ADSI, 'SELECT cn, distinguishedName
     FROM ''LDAP://DC=coal,DC=local''
     WHERE objectCategory = ''group''');

OPEN gC;

FETCH NEXT FROM gC INTO @t, @t2;

WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @ot = '''SELECT cn, displayName
     FROM ''''LDAP://DC=coal,DC=local''''
     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)
        EXECUTE (@tt);
        --print @tt
        FETCH NEXT FROM gC INTO @t, @t2;
    END

CLOSE gC;

DEALLOCATE gC;  

【问题讨论】:

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


    【解决方案1】:

    SQL Server ADO 对 Active Directory 的查询非常有限并且不提供完整 AD 接口的所有功能。

    根据 Active Directory MVP Richard Mueller on his web site,从搜索返回的 1000-1500 个对象的限制不能在 SQL Server AD 搜索中被规避或修复:

    您应该注意两个限制。首先,OPENQUERY 语句不支持多值属性。您无法检索多值属性的值,例如 memberOf。 其次,可以检索的记录总数限制为 1500 条(在 Windows 2000 Active Directory 中为 1000 条)。 不支持分页来自 SQL 分布式查询,因此无法克服此限制,除非修改 maxPageSize 的 Active Directory 服务器限制。

    所以恐怕您无法直接从 SQL Server 执行此操作 - 您必须找到另一种方法来实现此目标。

    【讨论】:

    • 如果您不关心速度并且愿意有点hacky,可以选择。例如,您可以为每个组触发 26 个查询,获取以“a”然后“b”等开头的所有用户,并将它们聚合到临时表或类似表中。其他分区方法可能更合适,但这是最容易解释的。
    猜你喜欢
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多