4

주로 SQL Server에서 특정 그룹의 구성원 인 사용자 목록을 검색해야했습니다. 나는 완벽하게 작동하는 그물에서 무언가를 발견 할 수 있었다. 해결 방법은 다음과 같이 표시됩니다 :Active Directory - 특정 그룹의 구성원 인 사용자 및 그룹 얻기

지금은
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 '+ ''''[email protected]+'''' +' 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 

, 그 그냥 잘 작동 입력 그룹의 사용자를 반환.

그러나 새로운 요청이있어 사용자가 회원처럼 다른 그룹을 회원으로 가질 수 있습니다.

objectClass = ''group''을 포함하도록 WHERE 조건에서 필터를 업데이트하려고했지만 작동하지 않습니다.

누구든지이 쿼리에 대해 조금 알고 있으며 그룹 (입력 그룹의 구성원)도 검색 할 수 있습니까?

+0

당신의 문제는 필터에 있다고 생각합니다. "그룹"이 사람이 아니기 때문에 ObjectCategory = Person을 꺼내서 대답을 얻는 지 확인하십시오. –

+0

나는 그것을 제거하고 또한 그룹으로, 그러나 헛된에서'OR' 진술을 추가하는 것을 시도했다. –

답변

0

귀하의 그룹이 사용자의 OU (폴더) 안에 있다고 가정합니까? 내 AD 설치에는 SecurityGroups라고하는 별도의 CN에 그룹이 있습니다. 기술적으로 당신은 할 수 :

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

member로 당신에게 해당 그룹의 모든 구성원의 DN을 줄 것이다. 그런 다음 멤버 배열을 가지며 해당 멤버 (또는 그룹!) 개체와 일치시켜야합니다. 기본적으로 DN의 연관 배열을 반환하기 때문에 그룹 객체를 필터링하고 해당 객체의 구성원에 대해 다시 쿼리를 중첩 할 수 있습니다.

+0

'member'를 사용하면 다음 오류가 발생합니다. '연결된 서버 "ADSI"에 대한 OLE DB 공급자 "ADsDSOObject"에서 행의 데이터를 가져올 수 없습니다. 부호 불일치 또는 오버 플로우 이외의 이유로 인해 데이터 값을 변환 할 수 없습니다. ' –