如何在UnboundID中通过SID后缀搜索LDAP条目?
解决LDAP中通过objectSid后缀查询无结果的问题
核心原因
objectSid是二进制属性,不是普通字符串类型,你用*512或*-512这种字符串通配符的方式,根本没法匹配它的二进制存储结构,所以查不到结果。
正确解决方案
方案1:直接查primaryGroupToken属性
既然你的目标是找primaryGroupToken为512的条目(一般是域管理员组),直接针对这个整数属性查询最直接:
ldapConnectionPool.search(baseDn, SearchScope.SUB, "primaryGroupToken=512")
方案2:用二进制匹配规则查objectSid后缀
如果非要通过objectSid的后缀来查,得用LDAP的二进制匹配规则。在Active Directory里,objectSid的最后4字节对应的就是primaryGroupToken,你可以这么写过滤器:
// 匹配objectSid最后4字节为0x00000200(十进制512) ldapConnectionPool.search(baseDn, SearchScope.SUB, "(objectSid:dnSuffix:=00000200)")
不同LDAP服务器的二进制匹配语法可能有差异,AD是支持上面这种dnSuffix规则的。
补充说明
你看到的S-1-5-21-xxx-xxx-xxx-512这种是objectSid的字符串展示形式,但LDAP实际存储的是二进制数据。你之前用字符串通配符去匹配,服务器会把二进制转成字符串再尝试匹配,但这种通配符方式没法正确识别末尾的数字部分,自然查不到结果。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

