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

re: AD 사용환경에서 login time 과 log out time 관리 방법은요?
작성자: 정토
작성일시: 2008-01-28 00:52,  조회수: 3,197
우연히 블로깅 중에 질문을 보고 제 관련분야라 답변을 드립니다.

물론, 님께서 요구하는 정보를 AD 스키마의 속성은 가지고 있습니다. 바로 이 두가지 User object 의 속성이 바로 그것입니다.

lastLogoff (Non-replicated)
lastLogon (Non-replicated)

두가지 모두 가장 마지막(최근) 로그온/오프를 할때 각 서버에 입력되는 값입니다. 간단히 이를 얻어오시기 위해서는 ADSI를 이용하는 VBScipt는 이렇게 하시면 됩니다.

set objOU = GetObject("LDAP://도메인명" )

For Each objUser In objOU
Set objLastLogon = objUser.Get("lastLogon")
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440

Wscript.Echo objUser.givenName & " 's last logon time: " & intLastLogonTime + #1/1/1601#
Next

뭐 이 정도가 될꺼 같습니다.

주의하실 점은 저장된 값이 large integer것이여서 ActiveDS.dll COM library의 LargeInteger interface를 사용하여 64비트에서 high와 low 파트를 얻을 수 있습니다. 이 값은 보통 흔히 사용하는 FileTime 값의 형식과 동일하며 .NET을 이용한다면 .NET DateTime 객체를 이용하여 변환할 수 있습니다.
C#을 사용한다면 다음과 같은 방법을 사용하시면 됩니다. (앞의 objUser라는 사용자 인스턴스 얻는부분은 생략)

LargeInteger largeInt = (LargeInteger)objUser.Properties["lastLogon"][0];

Int64 logonTick = largeInt.HighPart * 0x100000000 + largeInt.LowPart;
if(DateTime.MaxValue.Ticks >= logonTick && DateTime.MinValue.Ticks <= logonTick)
{
DateTime dTemp = DateTime.FromFileTime(logonTick);
}

그러나, 중요한점은 불행하게도 정상적으로 로그오프하지 않는다면 이 값 역시 업데이트 되지 않으며 또한 여러 대의 DC가 존재할때 이 값은 기본적으로 복제되는 속성이 아닙니다. 즉 개발자 분들이 이 정보를 취합하기가 힘들다는 겁니다. 즉 보통 기업환경에서 AD를 사용하여 AAA서비스를 구현하신다면 매우 중요한 인프라 서비스가 되기때문에 충분한 가용성을 고려하여 Deploy되기때문에 여러대의 DC가 있다고 생각해야 합니다. 각 사용자들은 라운드 로빈 방식으로 서버를 선택하여 인증을 진행하기 때문에 이 정보는 로그인 이후에 프로필 정보에 기억되고 이후 사용자의 로그오프를 하는 경우에 이 정보는 해당 DC에만 업데이트 됩니다.

개발자 입장에서는 이러한 환경에서는 리스트를 뿌리고 싶다면 n개의 DC를 모두 연결하여 보다 최근인 접속기록을 가지고 있는 DC를 비교해야 하기때문에 조금 번잡하기도 하고 깔끔하지 않는 면도 있습니다. 어찌되었든 여기에 대한 기술적인 솔루션 측면은 여러가지 존재할 수 있을겁니다. 다만 이 비지니스 로직에서 요구하는 욕심만큼의 리포트를 얻기위해서는 좀더 강력한 CIO레벨이나 경영진의 Support가 없이는 진행이 불가능한 경우가 많습니다.

즉 쉽게 생각하면 김과장은 특별한 일이 없다면 컴퓨터를 끄지 않고 다니는 사람이고, 박대리는 성격이 급해서 그냥 파워버튼을 눌러서 컴퓨터를 꺼버리는 친구라고 가정한다면, 이런 사람들의 정보는 정상적으로 업데이트가 불가능 하다고 생각하시면 됩니다. ^^;
중앙에서 개인적인 컴퓨팅 스타일까지 제어하는건 상당한 어려움이 있다고 생각하시면 됩니다. ^^;

원하시는 만큼의 답변이 되셨는지 모르겠습니다.

by IAM 컨설턴트, MCT 김호범 (trueccie@hotmail.com)

IP 주소: 125.129.199.102
전체 1 건의 댓글이 존재합니다.

송원석

이렇게 좋은 정보를 말씀해주셔서 대단히 감사드립니다. ^_^
2008-01-28 08:56
전체 421 건의 게시물, 17 페이지로 구성된 Active Directory Service Interface 게시판의 4 페이지입니다.
게시물
356

re: AD 초보 입니다. 궁금한점이 있어서 ... [2]

AD 초보

2008-06-02 5,165
355

re: AD 초보 입니다. 궁금한점이 있어 ... [1]

송원석

2008-06-03 2,862
354

ADSI

kimsoyoung

2008-04-30 2,992
353

re: ADSI

송원석

2008-04-30 3,000
352

계정에 대해서

원형희

2008-02-14 2,849
351

re: 계정에 대해서

송원석

2008-02-14 2,910
350

AD 사용환경에서 login time 과 log out time 관리 방법은요?

nparkstar@gmail.com

2008-01-23 2,856
349

re: AD 사용환경에서 login time 과 log out time 관리 방법은요?

송원석

2008-01-24 2,771

re: AD 사용환경에서 login time 과 log out time 관리 방법은요? [1]

정토

2008-01-28 3,197
347

태오사이트에 올라온 강좌에 관해서 글 남깁니다.

허욱

2007-12-24 718
346

re: 태오사이트에 올라온 강좌에 관해서 글 남깁니다. [1]

송원석

2007-12-24 2,956
345

ECUM을 사용하시는 분들은 어떻게 활용하시는지요?

허욱

2007-12-20 680
344

re: ECUM을 사용하시는 분들은 어떻게 활용하시는지요?

송원석

2007-12-21 2,911
343

re: ECUM을 사용하시는 분들은 어떻게 활용하시는지요? [4]

허욱

2007-12-21 695
342

LDAP에 관해서 질문 올립니다.

허욱

2007-12-18 803
341

re: LDAP에 관해서 질문 올립니다.

송원석

2007-12-19 2,878
340

re: LDAP에 관해서 질문 올립니다.

허욱

2007-12-19 749
339

re: 아..이런..

허욱

2007-12-19 720
338

re: 아..이런.. [1]

송원석

2007-12-19 2,913
337

active directory 계정 가져오기

꾸꾸오빠

2007-11-06 3,142
336

re: active directory 계정 가져오기

송원석

2007-11-07 3,088
335

re: active directory 계정 가져오기

꾸꾸오빠

2007-11-07 3,119
334

re: active directory 계정 가져오기

꾸꾸오빠

2007-11-07 3,119
333

re: active directory 계정 가져오기

송원석

2007-11-07 3,243
332

re: active directory 계정 가져오기 [1]

꾸꾸오빠

2007-11-08 3,043