当客户端对 AD 或 OpenLDAP 等目录进行 LDAP 搜索时,返回的结果是否需要表示执行任何修改操作之前或之后的目录状态?
或者换句话说,如果我进行一次大搜索,同时进行了一些影响部分结果的修改操作,那么我的搜索结果中是否可能包含一些修改操作之前的结果和一些修改操作之后的结果?
答案1
对于结果、锁定语义或读取的事务隔离级别没有任何保证。还需要考虑分布式数据库的情况。即使您正在查询的 LDAP 服务器只有一个进程查询和执行更新,更新也可能会在查询期间复制到入站。
如果您想知道如何处理这种情况,您可以在执行更新之前检查诸如 usnChanged 之类的值,并提示用户在提交更改之前刷新对象。您可能还想检查对象是否仍然存在。(即使 isDeleted 为真,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