2011-12-06 7 views
3

SQL Server에서 LDAP에 대한 열기 쿼리를 수행하기 위해 SQL 문을 구성하는 데 문제가 있습니다. 나는 여기에 설명 된대로 지침을 따랐다 : Querying Active Directory from SQL Server 2005하지만 나는 마지막 조각들을 모으는데 약간의 문제가있다.SQL Server에서 LDAP 쿼리 문제

첫째, 필자는 LDAP 서버의 위치를 ​​알지 못했습니다. 그래서 나는 nslookup을했고, 같은 기본 서버를 발견 : 나는 구성

abc.domain.popo.local 

OPENQUERY 그러나

SELECT * FROM OPENQUERY(ADSI, 'SELECT * FROM ''LDAP://DC=abc,DC=domain,DC=popo,DC=local'' WHERE 
objectCategory = ''User''') 

로, 내가 준비하는 동안

오류가 발생한다는 오류가 연결된 서버 "ADSI"에 대한 OLE DB 공급자 "ADSDSOObject"에 대한 쿼리 "SELECT * FROM 'LDAP : // DC = abc, DC = 도메인, DC = popo, DC = local'WHERE objectCategory = 'User'"

여기에 어떤 문제가 있습니까? DC을 잘못 설정하고 있습니까 (DC가 무엇 인지도 모르기 때문에)? 아니면 LDAP 용으로 잘못된 서버를 가지고있을 가능성이 더 큽니까?

답변

5

Windows Active Directory (기능적으로 LDAP로 표시됨)에 대해 쿼리하는 것처럼 보입니다. 기본적으로 AD는 익명 쿼리를 허용하지 않으므로 신뢰할 수있는 사용자 이름과 암호로 인증해야합니다. 또한 적절한 기본 값 ("DC = abc, DC = domain, DC = popo, DC = local")을 가지는지 확인하려면 sysadmin에게 문의해야합니다.

+0

내가 사용자 이름/암호를 지정해야합니다 내가 쿼리를 실행하는 Windows 인증을 사용하고 있더라도? – Rondel

+0

확신 할 수는 없지만 신임장이 통과되면 놀라실 것입니다. 명시 적으로 자격 증명을 설정하는 것은 적어도 시도해 볼만한 것입니다. –

+0

그럴 수도 있습니다. 나는 연결된 서버에 대한 보안이 설정되지 않았다고 생각합니다. 연결된 서버의 속성을 확인하기 위해 관리자를 얻어야합니다. – Rondel

1

Richard Mueller의 ADO/SQL search tips을 참조하십시오. 도움이 될까요? (리처드의 사이트가 LDAP 및 Active Directory 참조 및 팁의 실제 보물이 - 추천!)이 사이트에서 본 바로는

, 당신은 잘못된 objectCategory을 가진 수 있습니다 - (Person를 사용해보십시오 대신 User 이는 내가 믿는 것은)는 objectClass입니다 :

SELECT * FROM OPENQUERY(ADSI, 
      'SELECT * FROM ''LDAP://DC=abc,DC=domain,DC=popo,DC=local'' 
      WHERE objectCategory = ''Person''') 
+0

링크를 제공해 주셔서 감사합니다. 그것은 좋은 정보를 가지고 있지만 내 현재의 문제를 해결하지 않습니다.또한 objectCategory 대신 objectClass를 사용하여 실패했습니다. – Rondel

+0

@Rondel : 무엇을 선택하려고합니까? 다른 시작 지점에서 선택해야 할 수도 있습니다 (예 : 'SELECT * FROM' 'LDAP : // CN = 사용자, DC = 도메인, DC = popo, DC = local' 'WHERE objectCategory =' '사용자' '''또는 이와 비슷한 것 .... –

+0

지금 당장 사용자를 위해 AD에서 얻을 수있는 정보를 얻으려고하고 있지만 궁극적으로 displayNames와 usernames 만 원합니다. – Rondel

1

것은 "ABC는"해당 도메인의 도메인 컨트롤러의 실제 이름이 아닌 있는지 확인합니다; 따라서이 경우에 OPENQUERY는 생략하고 있어야한다 :

SELECT * FROM OPENQUERY(ADSI, 'SELECT * FROM ''LDAP://DC=domain,DC=popo,DC=local'' WHERE objectCategory = ''Person'' AND objectClass = ''user''')

+0

잘 알고 있습니다. 따라서 서버 abc.domain.popo.local, def.domain.popo.local 등이있는 경우 ** DC = domain, DC = popo, DC = local **을 사용해야합니다. – Rondel

+0

@Rondel - 예 가장 좋은 방법으로 "serverless bind"를 사용해야합니다. 그렇지 않으면 특정 도메인 컨트롤러를 대상으로합니다. 서버가 다운되면 쿼리가 실패합니다 –