使用Java代码更新lastLogonTimestamp

时间:2013-09-03 17:36:39

标签: java active-directory

是否有人使用Java程序在Active Directory中设置lastLogonTimestamp的值?

我发现以下内容将lastLogonTimestamp转换为java.util.Date格式:

https://forums.oracle.com/message/10133757#10133757

使用相同的逻辑,我试图修改此属性的值:

    long llastLogonAdjust=11644473600000L;
    long currentTime = System.currentTimeMillis();
    long currentTimeAD = currentTime * 10000-llastLogonAdjust;
    System.out.println(currentTimeAD);
    ModificationItem[] mods = new ModificationItem[1];
    mods[0]= new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("lastLogonTimestamp", Long.toString(currentTimeAD)));
    ldapContext.modifyAttributes(dn, mods);

但是我收到了以下错误:

javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000209A: SvcErr: DSID-031A0DD5, problem 5003 (WILL_NOT_PERFORM), data 0

任何想法,如何解决?

1 个答案:

答案 0 :(得分:1)

查看lastLogonTimestamp的文档,只有系统可以更新此值。您无法使用Java或其他任何东西设置此值。

编辑:

请看Warren Williams对此blog postInternet Archive backup)有关lastLogonTimestamp属性的解释:

  

请务必注意lastLogontimeStamp属性的用途,以帮助识别不活动的计算机和用户帐户。 lastLogon属性不是为提供实时登录信息而设计的。使用默认设置时,lastLogontimeStamp将比当前日期晚9-14天。

     

如果您正在寻找更多“实时”登录跟踪,则需要查询DC上的安全事件日志以获取所需的登录事件,即528 -Windows XP \ 2003及更早版本或4624 Windows Vista \ 2008。有关详情,请参阅Eric Fitzgerald的blog postInternetArchive)。 (我认为他对审计有所了解)

     

对于近实时数据,IMO最好的选择是使用事件日志收集服务将所有域控制器安全事件日志收集到集中式数据库。然后,您可以在单个数据库中查询所需的登录事件。 Microsoft的安全事件日志收集解决方案是Audit Collection Services。还有许多第三方解决方案。