【发布时间】: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