![특정 시간까지 비밀번호 만료 일정](https://rvso.com/image/1264383/%ED%8A%B9%EC%A0%95%20%EC%8B%9C%EA%B0%84%EA%B9%8C%EC%A7%80%20%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8%20%EB%A7%8C%EB%A3%8C%20%EC%9D%BC%EC%A0%95.png)
Windows Server 2003 또는 2008 및 Active Directory에서 사용자 암호가 그날 만료될 때 특정 시간(예: 오전 4시)에 만료되도록 정책에 지정할 수 있는 방법이 있습니까?
문제는 근무일 중간(예: 오전 9시)에 만료가 발생하기 때문에 발생했습니다. 그러면 사용자가 이미 네트워크에서 Windows에 로그인하고 다른 응용 프로그램을 사용하는 경우 인증으로 인해 잘못된 동작이 시작됩니다. Windows에서 새 비밀번호를 요청하려면 로그아웃했다가 다시 로그인해야 합니다.
따라서 아침 일찍 로그인할 때 새 비밀번호를 묻는 경우 근무일 중에 다시 로그아웃할 필요가 없습니다.
AD 관리자 중 한 명이 "하루를 시작하기 전에 비밀번호가 만료되는지 확인하라고 하세요"라고 말했습니다. 그런데 실제로 누가 그런 일을 합니까?
그리고 이러한 유형의 정책을 확인하기 위해 AD에 액세스할 수 없습니다. 그렇다면 이것이 가능합니까?
답변1
AFAIK 이것은 불가능합니다.
현재 비밀번호가 N일 후에 만료된다는 내용과 비밀번호 변경 옵션을 제공하는 여러 미리 알림이 있습니다. 사용자가 이 알림을 무시하기로 선택하면 불행하게도 스스로 무덤을 파는 것입니다.
답변2
비슷한 문제가 있습니다.
내가 생각할 수 있는 유일한 방법은 Active Directory를 통과하여 다음 날 만료될 계정을 식별하는 스크립트를 매일 밤 실행하는 것입니다. 그렇다면 플래그를 지정하여 비밀번호를 변경하세요. 코드는 다음과 같습니다. 이 스크립트를 실행해 본 적이 없으므로 약간의 조정이 필요할 수 있습니다.
Const SEC_IN_DAY = 86400
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const ADS_SCOPE_SUBTREE = 1000
dim strname
dim strdist
dim dtmvalue
on error resume next
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName, profilepath, name from 'LDAP://dc=Example,dc=com' where objectCategory = 'User'"
Set objuserRecordSet = objCommand.Execute
objUSerRecordSet.MoveFirst
Do Until objuserRecordSet.EOF
strdist = objuserRecordSet.Fields("distinguishedName").Value
strname = objuserRecordSet.Fields("name").Value
Set objUserLDAP = GetObject _
("LDAP://" & strdist)
intCurrentValue = objUserLDAP.Get("userAccountControl")
dtmValue = objUserLDAP.PasswordLastChanged
If intCurrentValue and ADS_UF_DONT_EXPIRE_PASSWD Then
x = "The password does not expire."
Else
Set objDomainNT = GetObject("WinNT://escc.gov.uk")
intMaxPwdAge = objDomainNT.Get("MaxPasswordAge")
If intMaxPwdAge < 0 Then
x = "Password does not expire"
Else
intMaxPwdAge=intMaxPwdAge/86400
strold = ((dtmValue + intMaxPwdAge)-now)
if strold < 2 and strold > 0 then
objUserLDAP.pwdLastSet = 0
objUserLDAP.SetInfo
end if
end if
End If
dtmValue= ""
objuserrecordset.movenext
Loop