게시판 본문 Active Directory Service Interface - Read Only

re: 조직단위 밑에 조직단위..
작성자: 송원석
작성일시: 2007-05-29 23:14,  조회수: 3,110
안녕하세요? 송원석입니다. ^_^

아무래도 안되겠습니다. 지금까지 제가 아래에서 답변드렸던 것은 일단 보류해주십시오. 지금까지 알려드린 방법을 사용하시면 일도 제대로 마무리 못하고 너무 힘이 들 겁니다. 차라리 조금 어렵더라도 제가 사용하는 방법을 그대로 알려드리도록 하겠습니다. 다만 제가 사용하는 방법은 컴포넌트도 만들어야 하고 조금 어렵습니다.

그리고 이건 이해해 주시기 바랍니다. 제가 말씀드리는 코드는 결코 녕이님의 환경에서 단번에 완벽하게 동작하지 않을 겁니다. 반드시 상수라던지 여러가지 설정을 맞추어주셔야만 하고 이 문제는 제가 그 환경을 경험하지 않고서는 대신 처리해 드릴 수도 없습니다. 그리고 저 역시도 나름의 일이 있기 때문에 어느 한계 이상으로는 도와드리기가 힘듭니다. 컴포넌트도 직접 만드셔야만 합니다. 컴포넌트를 안만드는 방법은 없냐고 하시면 저로서도 더 이상 도와드릴 수 있는 방법이 없습니다. 권한 문제 때문에 반드시 필요하고 저는 이 방법 외에는 알지 못합니다. 이 점은 양해를 부탁드립니다.

기존에 말씀드렸던 코드는 사용자가 입력한 아이디를 바탕으로 ADsPath 를 구성합니다. 그런데 녕이님도 오해를 하신 것처럼 대부분의 분들이 cn 이 곧 아이디라고 생각합니다. 그러나 사실은 그렇지 않습니다. 이게 첫 번째 문제입니다. 두 번째 문제는 ou 입니다. 이 ou 는 도메인 트리를 구성하기에 따라 무수히 많은 사례가 나올 수 있습니다. 결코 예제에서처럼 깔끔하게 한 단계 짜리 ou 로 끝나는 경우는 그리 많지가 않습니다. 그런데 로그인 화면에서 입력받는 아이디와 암호만으로는 ADsPath 를 적절히 구성할 방법이 없죠. 지금까지 말씀드렸던 것은 어디까지나 기본형에 불과한 것이었던 겁니다.

제가 사용하는 방법의 요점은 ADO 입니다. 다음과 같은 SELECT 문을 만듭니다. 여기서 대괄호 ([]) 안의 내용들은 모두 녕이님의 환경에 맞추어주어야만 합니다.
SELECT
    ADsPath
FROM
    'LDAP://[도메인정보] '
WHERE
    objectClass = 'user' AND sAMAccountName =’[입력받은 아이디]’
그리고 이 쿼리를 다음의 코드를 사용하여 조회합니다.
Set objADsConnection = CreateObject("ADODB.Connection")
objADsConnection.Provider = "ADsDSOObject"
objADsConnection.Open "Active Directory Provider"

Set objADsRecordset = CreateObject("ADODB.Recordset")
objADsRecordset.Open [위에서 작성한 SELECT 문], objADsConnection, 1, 1

[ … 기타 처리 … ]

objADsRecordset.Close
Set objADsRecordset = Nothing
위의 코드를 실행시키면 놀랍게도 해당 아이디의 사용자 정보가 레코드셋으로 넘어옵니다. 만약 해당 아이디가 존재하지 않는다면 RecordCount 가 0 이겠죠. 그리고 정상적인 사용자라면 ADsPath 의 값이 레코드셋으로 조회가 될꺼구요. 그러면 이 ADsPath 를 지난번에 말씀드렸던 코드를 활용하여 입력받은 암호로 인증까지 처리하면 되겠죠. 이 방법을 사용하면 ou 가 몇 단계든 상관도 없고 알 필요도 없습니다.

그런데 문제는 이와 같은 코드가 권한 문제 때문에 ASP 에서는 제대로 동작하지 않는다는 겁니다. 그래서 어쩔수 없이 위의 코드와 인증을 담당하는 코드를 VB 6.0 등으로 적절히 컴포넌트를 하나 만듭니다. 그리고 다음 문서에서 설명하는 방법과 동일한 요령으로 컴포넌트를 구성 요소 서비스에 등록하되, 이때 COM+ 응용 프로그램의 신원 계정으로 사용하는 계정을 AD 에 접근할 수 있는 적당한 계정으로 지정해 줍니다.
http://www.egocube.pe.kr/Lecture/Content/component/200203150011
조금 복잡하죠? ^_^;;;

그리고, 위의 요령을 조금 더 활용하면, 로그인을 하고서 리턴되는 개체의 속성들을 살펴보면 원하시는 메일 주소라던가 기타 정보들이 있으므로 이를 사용하시면 되구요. 아니면 SELECT 문을 다시 한 번 날리셔서 ADsPath 뿐만이 아닌 다른 다양한 정보들을 가져오실 수도 있습니다. 다음과 같이 말입니다.
SELECT
    CN, ADsPath, sAMAccountName, mail, telephoneNumber, title
FROM 
    … 생략…
이 쿼리는 지금 한글이름, 메일주소, 전화번호, 직책 정도를 가져오게 되겠지요. 조금 어려우실 수도 있습니다만 저도 짧은 글만으로 설명을 드리려니 많은 한계를 느낍니다. 그리고 ADsDSOObject 등의 키워드로 구글등에서 검색해보시면 많은 참고 자료를 얻으실 수 있으실 것입니다. ^_^;;;

감사합니다.
IP 주소: 121.143.98.118
전체 2 건의 댓글이 존재합니다.

송원석

다음과 같은 문서도 있네요. ^_^
2007-05-29 23:17

송원석

2007-05-29 23:17
전체 421 건의 게시물, 17 페이지로 구성된 Active Directory Service Interface 게시판의 6 페이지입니다.
게시물
303

계정 정보 변경.. 문의

녕이

2007-06-04 5,061
302

re: 계정 정보 변경.. 문의 [2]

송원석

2007-06-04 2,878
301

GetObject("WinNT://...) 호출하는데 20초가 넘게 걸려요.

ADSI이상해

2007-06-04 2,995
300

re: GetObject("WinNT://...) 호출하는데 20초가 넘게 걸려요.

송원석

2007-06-04 2,849
299

oBuilder.OpenDSObject("LDAP 로 관리자로 로그인해서 다른사용자의 변경방법은요?

녕이

2007-06-01 2,946
298

re: oBuilder.OpenDSObject("LDAP 로 관리자로 로그인해서 다른사용자의 변경방법은요?

송원석

2007-06-01 2,924
297

ADODB로 사용자 정보 변경가능한가요? [2]

녕이

2007-06-01 2,865
296

AD 컴포넌트 Vb 문의 [2]

녕이

2007-06-01 3,019
295

VB로 테스트 하고 있는데요.. [3]

녕이

2007-05-30 2,938
294

조직단위 밑에 조직단위..

녕이

2007-05-29 2,897

re: 조직단위 밑에 조직단위.. [2]

송원석

2007-05-29 3,110
291

많은 정보 얻어갑니다.. [2]

녕이

2007-05-28 2,751
290

ad 조직단위, 컨테이너 [3]

녕이

2007-05-28 2,925
289

ㄷ방금 알려주신대에서 다운받아 확인해보았습니다. [3]

녕이

2007-05-28 3,038
288

인증후 사용자 이메일이나 정보를 알수 없나요?

녕이

2007-05-28 2,790
287

re: 인증후 사용자 이메일이나 정보를 알수 없나요?

송원석

2007-05-28 2,954
286

다시 해서 되긴 됐는데요.

녕이

2007-05-28 5,139
285

re: 다시 해서 되긴 됐는데요.

송원석

2007-05-28 2,900
284

제대로 넣은거 같은데.. 이상하게 안되네요..

녕이

2007-05-28 2,969
283

'dso.OpenDSObject' 개체가 이 속성 또는 메서드를 지원하지 않습니다.:

녕이

2007-05-28 3,193
282

타도메인에서 AD계정 인증 받기 문제

녕이

2007-05-25 2,929
281

re: 타도메인에서 AD계정 인증 받기 문제

송원석

2007-05-26 3,024
280

iiswebadmin 문의 드립니다.

마진가

2007-05-17 2,972
279

re: iiswebadmin 문의 드립니다.

송원석

2007-05-17 3,079
278

AD를 통한 웹인증을 하려는데요

용가리

2007-03-21 3,041