0

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

我发现以下转换lastLogonTimestampjava.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

任何想法,如何解决它?

4

1 回答 1

3

查看lastLogonTimestamp的文档,只有系统可以更新这个值。您不能使用 Java 或其他任何方式设置此值。

编辑:

查看Warren Williams 的这篇文(Internet Archive 备份),了解有关 lastLogonTimestamp 属性的说明:

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

如果您正在寻找更多“实时”登录跟踪,您将需要查询 DC 上的安全事件日志以获取所需的登录事件,即 528 –Windows XP\2003 和更早版本或 4624 Windows Vista\2008。有关更多信息,请参阅 Eric Fitzgerald 的这篇博文( InternetArchive )。(我认为他对审计有所了解)

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

于 2013-09-03T23:35:53.707 回答