복붙노트

[SQL] SQL 서버 2005에서 Active Directory를 쿼리

SQL

SQL 서버 2005에서 Active Directory를 쿼리

어떻게 SQL 서버 2005에서 Active Directory를 쿼리 할 수 ​​있습니다?

해결법

  1. ==============================

    1.여기 아주 일반적인 질문하지만, 몇 가지 포인터입니다.

    여기 아주 일반적인 질문하지만, 몇 가지 포인터입니다.

    당신은 연결된 서버는이 같은 점 ADSI에 (Active Directory 서비스 인터페이스) 뭔가를 할 것이라는 SQL Server에서 생성해야합니다.

    EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'

    그럼 당신은 쿼리의 다음과 같은 종류를 사용할 수 있습니다.

    
    SELECT *
    FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
    FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
    WHERE objectCategory = ''Person''
    AND objectClass = ''user'')
    

    적절 // 라인 (자세한 내용은 AD 관리자에게 문의) 및 OpenQuery를을 사용하여 분산 애드혹 쿼리가 SQL 서버에 기본적으로 사용되는 것을 알고 : 당신은 LDAP를 설정해야합니다. 당신은 꽤 쉽게해야하지만 위의 일단 특정 변화를 Google에.

  2. ==============================

    2.예.

    예.

    연결된 서버 :

    EXEC master.dbo.sp_addlinkedserver
        @server = N'ADSI', 
        @srvproduct=N'Active Directory Services',
        @provider=N'ADsDSOObject', 
        @datasrc=N'Servername.domain.com'
    

    질문:

    select * from openquery
    (
    ADSI,'SELECT name 
    FROM ''LDAP://Servername.domain.com''
    WHERE objectCategory = ''Person'' AND objectClass = ''user''
    ')
    

    Google에서 서버와 LDAP를 링크 검색하는 경우 사례가 많이 있습니다. 나는 LDAP 아주와 함께 작동하도록 복잡 할 수있는이 때문에 말한다.

  3. ==============================

    3.는 Active Directory 쿼리에서 한 번에 반환 1000 개 레코드의 최대 한계를 극복하기 위해, 당신은 내가 아래에 쓴 기능을 사용할 수 있습니다.

    는 Active Directory 쿼리에서 한 번에 반환 1000 개 레코드의 최대 한계를 극복하기 위해, 당신은 내가 아래에 쓴 기능을 사용할 수 있습니다.

    CREATE FUNCTION [dbo].[tf_GetAllUsersFromActiveDirectory]
    ()
    RETURNS 
         @USERS TABLE 
            (   
                  sAMAccountName    VARCHAR(25)             PRIMARY KEY CLUSTERED     
                , givenName VARCHAR(200)
                , SN VARCHAR(200)
                , userAccountControl VARBINARY(8)
                , mail VARCHAR(200)
            )
    AS
    BEGIN
    
    INSERT INTO @Users
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=A*)(sAMAccountName=B*)(sAMAccountName=C*)(sAMAccountName=D*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=E*)(sAMAccountName=F*)(sAMAccountName=G*)(sAMAccountName=H*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL 
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=I*)(sAMAccountName=J*)(sAMAccountName=K*)(sAMAccountName=L*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=M*)(sAMAccountName=N*)(sAMAccountName=O*)(sAMAccountName=P*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL 
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Q*)(sAMAccountName=R*)(sAMAccountName=S*)(sAMAccountName=T*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=U*)(sAMAccountName=V*)(sAMAccountName=W*)(sAMAccountName=X*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    UNION ALL 
    SELECT  sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Y*)(sAMAccountName=Z*)) );sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
    
    RETURN
    END
    GO
    
  4. ==============================

    4.그냥 참고; 링크 사용을 제거하는

    그냥 참고; 링크 사용을 제거하는

    exec sp_dropserver 'ADSI';
    
  5. from https://stackoverflow.com/questions/1251038/querying-active-directory-from-sql-server-2005 by cc-by-sa and MIT license