搜索 SN(姓氏)时 Lucee LDAP 不返回结果
Lucee LDAP not returning results when searching for SN (Surname)
我有这段代码可以 return 得到正确的结果
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="mail=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
但这不会:
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="SN=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
我缺少什么以便可以通过 Active Directory SN 属性进行搜索?
知道名字和姓氏时如何搜索 Active Directory 的加分项:
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="givenname=#form.givenname#;SN=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
来源:http://www.rlmueller.net/AmbiguousNameResolution.htm
其中“|”是“或”运算符,“*”是通配符。更好的是,假设您知道此人的名字是“Jim Smith”。您可以使用过滤器:
(anr=吉姆史密斯)
现在 Active Directory 将搜索任何命名属性与“Jim Smith*”匹配的对象,以及 (givenName=Jim*) 和 (sn=Smith*) 的任何对象,以及 (givenName=史密斯*) 和 (sn=吉姆*)。在将字符串分解为两个值时,该算法仅考虑字符串中的第一个 space。例如过滤器:
(anr=吉姆·史密斯·威廉姆斯)
这将查询任何命名属性与“Jim Smith Williams*”匹配的对象,以及 (givenName=Jim*) 和 (sn=Smith Williams*) 或 (givenName=Smith Williams*) 的对象) 和 (sn=吉姆*).
当应用 anr
语法时,它完全满足我的需要,我不必对用户数据进行任何花哨的解析(例如循环遍历名称中的 spaces ,搜索 @ 符号等)。
更新:
歧义名称解析 (ANR) 是 Active Directory 中的一种高效搜索算法,它允许您在单个子句中指定涉及多个 naming-related 属性的复杂过滤器。当您知道有关对象名称的某些信息时,它可用于在 Active Directory 中定位对象,但不一定是哪个命名属性具有该信息。虽然 ANR 通常用于定位用户对象,但它可用于在 Active Directory 中查找任何 class 对象。
来源:https://social.technet.microsoft.com/wiki/contents/articles/22653.active-directory-ambiguous-name-resolution.aspx
我有这段代码可以 return 得到正确的结果
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="mail=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
但这不会:
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="SN=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
我缺少什么以便可以通过 Active Directory SN 属性进行搜索?
知道名字和姓氏时如何搜索 Active Directory 的加分项:
<cfldap server="ad.domain.com"
action="query"
name="qryResults"
start="DC=ad,DC=domain,DC=com"
filter="givenname=#form.givenname#;SN=#form.searchterm#"
username="#application.ldapUsername#"
password="#application.ldapPassword#"
attributes="cn,sn,givenName,mail,st,l,ou,sAMAccountName"
/>
来源:http://www.rlmueller.net/AmbiguousNameResolution.htm
其中“|”是“或”运算符,“*”是通配符。更好的是,假设您知道此人的名字是“Jim Smith”。您可以使用过滤器:
(anr=吉姆史密斯)
现在 Active Directory 将搜索任何命名属性与“Jim Smith*”匹配的对象,以及 (givenName=Jim*) 和 (sn=Smith*) 的任何对象,以及 (givenName=史密斯*) 和 (sn=吉姆*)。在将字符串分解为两个值时,该算法仅考虑字符串中的第一个 space。例如过滤器:
(anr=吉姆·史密斯·威廉姆斯)
这将查询任何命名属性与“Jim Smith Williams*”匹配的对象,以及 (givenName=Jim*) 和 (sn=Smith Williams*) 或 (givenName=Smith Williams*) 的对象) 和 (sn=吉姆*).
当应用 anr
语法时,它完全满足我的需要,我不必对用户数据进行任何花哨的解析(例如循环遍历名称中的 spaces ,搜索 @ 符号等)。
更新: 歧义名称解析 (ANR) 是 Active Directory 中的一种高效搜索算法,它允许您在单个子句中指定涉及多个 naming-related 属性的复杂过滤器。当您知道有关对象名称的某些信息时,它可用于在 Active Directory 中定位对象,但不一定是哪个命名属性具有该信息。虽然 ANR 通常用于定位用户对象,但它可用于在 Active Directory 中查找任何 class 对象。 来源:https://social.technet.microsoft.com/wiki/contents/articles/22653.active-directory-ambiguous-name-resolution.aspx