Friday, January 12, 2007

Active Directory User 최근 암호 변경일 가져 오기

메일 서버를 관리하다 보니 이상한 요구 사항을 많이 받게 된다. 물론 최근 암호 변경일 확인은 이상한 요구는 아니지만 해 보면서 왜 이렇게 저장을 했을 까 하는 의문이 생긴다.
AD에 사용자의 정보를 보기 위해 ADSIEDIT를 사용하게 되는 데 글을 안올린 동안 많이 쓸 기회가 생겼다. Microsoft SQL 2000에 쿼리분석기(SQL Query Analyzer)가 있다면 Active Directory에는 ADSIEDIT….?
ADSIEDIT는 Windows 설치 CD의 SUPPORT\TOOLS 폴더에 있는 SUPTOOLS.MSI를 실행하여 Windows Support Tools을 설치 하면 된다.

SQL> SELECT * FROM USER_TABLE WHERE PwdLastSet > ‘2007-01-12’
LDAP> (&(objectCategory=user)(pwdLastSet<=128126880000000000))

위와 같이 LDAP쿼리를 던지면 조건에 맞는 마지막 비밀번호 변경일을 확인 할 수 있다.
여기서 AD의 사용자 Attribute에 들어가는 pwdLastSet은 Windows 파일 시간이 들어가며 MSDN에는 아래와 같이 설명하고 있다.

Windows 파일 시간은 UTC(지역 표준시) 서기 1601년 1월 1일 자정(12:00) 이후로 경과한 100나노초 간격 수를 나타내는 64비트 값입니다. Windows는 파일 시간을 사용하여 응용 프로그램에서 파일을 만들고, 액세스하고, 쓴 시간을 기록합니다.

마지막으로 코드상에서 비교를 원하는 시간은 아래 코드와 같이 해서 가져올 수 있다.

Dim CompareDate As DateTime
CompareDate = CType(args(0), DateTime)

Dim fTime As Long
fTime = CompareDate.ToFileTimeUtc

Console.WriteLine("DateTime : " & CompareDate.ToShortDateString())
Console.WriteLine("FileTimeUTC : " & fTime.ToString())

1 comment:

21st Century Software Solutions said...

ldap online training| ldap training| call us+919000444287 ...
www.21cssindia.com/courses/ldap-online-training-103.html
LDAP Online Training, LDAP training, LDAP course contents, LDAP , call us: +919000444287,dharani@21cssindia.com.