LDAPsearch结果是事务性的吗?

当客户端针对AD或OpenLDAP这样的目录进行LDAPsearch时,在执行任何修改操作之前或之后,是否需要返回表示目录状态的结果?

换句话说,如果我执行一个大的search,同时执行几个修改操作会影响一些结果,那么我的search结果是否可能包含一些来自修改操作之前的结果和一些结果那是从修改后的操作?

读取结果或locking语义或事务隔离级别没有任何保证。 还有分布式数据库要考虑的情况。 即使您正在查询的LDAP服务器只有一个进程查询和执行更新,并且更新可以在您的查询过程中被复制到内部。

如果您想知道如何处理这个问题,可以在执行更新之前检查一个值,例如usnChanged,并在提交更改之前提示用户刷新对象。 您可能还想检查对象是否仍然存在。 (即使isDeleted为true,usnChanged也会存在)。 并且不要将可分辨名称用作唯一值来标识对象(Active Directory中的objectGuid将作为引用标识符)。

通过Active Directory,还可以注册更改通知。

在Active Directory域服务中更改通知
https://msdn.microsoft.com/en-us/library/aa772153(v=vs.85).aspx

使用DirSync控件轮询更改
https://msdn.microsoft.com/en-us/library/ms677626(v=vs.85).aspx

Active Directory – 变更跟踪技术概述
https://msdn.microsoft.com/en-us/library/ms677625(v=vs.85).aspx