TSQL: How to get a list of groups that a user belongs to in Active Directory

后端 未结 5 1924
盖世英雄少女心
盖世英雄少女心 2020-12-16 01:47

I have two queries that retrieve all groups and all users in a domain, Mydomain

--; Get all groups in domain MyDomain
select  *  
from    OpenQu         


        
5条回答
  •  死守一世寂寞
    2020-12-16 02:25

    Stored procedure below, execute using example:

    Get_ADGroups_ForUser 'Beau.Holland' --AccountName

    Note: replace LDAP://DC=Domain,DC=local with your own domain.

    CREATE PROCEDURE dbo.Get_ADGroups_ForUser
    (
        @Username NVARCHAR(256) 
    )
    AS
    BEGIN
    
        DECLARE @Query NVARCHAR(1024), @Path NVARCHAR(1024)
    
        -- Find the fully qualified CN e.g: CN=Beau Holland,OU=Users,OU=Australia,OU=NSO,OU=Company,DC=Domain,DC=local
        -- replace "LDAP://DC=Domain,DC=local" with your own domain
        SET @Query = '
            SELECT @Path = distinguishedName
            FROM OPENQUERY(ADSI, ''
                SELECT distinguishedName 
                FROM ''''LDAP://DC=Domain,DC=local''''
                WHERE 
                    objectClass = ''''user'''' AND
                    sAMAccountName = ''''' + @Username + '''''
            '')
        '
        EXEC SP_EXECUTESQL @Query, N'@Path NVARCHAR(1024) OUTPUT', @Path = @Path OUTPUT 
    
        -- get all groups for a user
        -- replace "LDAP://DC=Domain,DC=local" with your own domain
        SET @Query = '
            SELECT cn,AdsPath
            FROM OPENQUERY (ADSI, '';(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=' + @Path +'));cn, adspath;subtree'')'
    
        EXEC SP_EXECUTESQL @Query  
    
    END
    GO
    

提交回复
热议问题