(uid=afauser):匹配uid属性为afauser的所有对象。(uid=test*):匹配uid属性以test开头的所有对象。(!(uid=test*)):匹配uid属性不以test开头的所有对象。(&(department=123)(city=beijing)):匹配department属性为123,且city属性为beijing的所有对象。(|(department=123)(department=45*)):匹配department属性值为123或以45开头的所有对象。
PS:运算符是放在前面的,不同的条件要用括号括起来。
上面的department和city都是属性,像DC=afa,DC=com也是有属性的,attribute name就是属性,value就是属性的值。
OK,再继续看,下面是users下的administrator的属性值,相同的其它的用户,拥有的属性和administrator也大都一样,像人一样,都是两个眼睛、一个鼻子,一个嘴,只不过有的眼大,有的鼻梁高,有的帅,有的更帅,所以属性大都一样,但值有差异。
那现在比如要搜索域下的所有非机器用户,除去那些机器自带的用户,语法如下:
(&(objectClass=user)(objectCategory=person))
点击搜索输入语法进行搜索:
但出现了个问题,结果是7个,我看jack和jixi都在,但cuihua不在,原因是我们语法搜索时,是基于Users这个目录下的,而cuihua是在afa科技这个组织单元下的安全组中。
原因是搜索时search base指定了搜索位置,模式是subtree当前目录下搜索,所以把刚才的cn=users去掉就行了,cuihua就出来了:
最后还剩一个问题,就是这个搜索语句是如何得出来得,可以看到,这个语句主要就两个条件,一个objectClass=user,一个objectCategory=person。
而objectClass是有多个值的:
所以,把objectClass的user值换成top,一样也可以得到结果,原因在于user是top的一个子类,这个user子类下面都是用户。
但会发现,只要objectClass一样也能查出结果,而且搜出来10个用户,比不加objectCategory结果更多,那为什么要加objectCategory这个条件呢。
根据大佬说法,低版本的操作系统,win2008之前,默认不对objectClass属性进行索引,但对objectCategory建立了索引,所以为了确保语句可以在所有版本的AD上正常运行,建议组合。
再看下objectCategory,这个属性就一个,且值是一样的:
按照语法看,正确写法应该是下面这个样子:
(&(objectClass=user)(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=afa,DC=com))
查询时值需要写全,不全应该使用通配符,那为什么上面objectCategory可以等于person呢,原因在于为了避免值太长,语句看起来冗余且不命令,所以支持别名查询,即ldap支持用类lDAPDisplayName作为搜索条件。
而上面那一串长的别名就是person。
完
本文地址:百科问答频道 https://www.neebe.cn/wenda/935419_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!