Ldap 简单用户搜索 return LDAP:错误代码 53 - 不愿处理未索引的搜索操作
Ldap simple user search return LDAP: error code 53 - Unwilling to process the unindexed search operation
我不是 LDAP 专家,我只是想 运行 对用户进行一些过滤,比如让用户以某个前缀开头。每次我在过滤器 [LDAP: error code 53 - Unwilling to process the unindexed search operation]; remaining name 'ou=internal,o=XXX,c=us'
中使用 * 时都会出错
它没有任何意义,甚至不确定该错误消息是什么意思。
传入用户名的过滤器完全匹配工作正常
String filter = "uid=exactMatchuserName";
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
constraints.setReturningAttributes(attrIdsToSearch);
NamingEnumeration users = ldapConnection().search("ou=internal,o=XXX,c=us", filter, constraints);
但是我在搜索中使用 * String filter = "uid=*ma";
然后我收到一个错误
服务器告诉您它不愿意执行不能使用索引的搜索。如果你不知道索引是什么,你可以阅读database indexes上的维基百科文章,但简而言之:
Indexes are used to quickly locate data without having to search every row in a database table every time a database table is accessed.
索引是通过按照索引中指定的方式对其中一列进行排序而建立的(对于字符串列,通常是按字母顺序排列)。因此,例如,如果我搜索 uid=gabriel
,它不需要查看目录中的每个用户。它可以直接跳到 G 并快速找到它。
但是,这意味着索引只能在您至少知道第一个字母时使用。当你在搜索的开头使用通配符时,你不知道第一个字母,所以不可能使用索引,它需要检查目录中的每个用户是否匹配。
您有 3 个选项:
- 不要在开头放置通配符。
- 向使用索引属性的查询添加另一个条件,然后您将能够在
uid
中使用通配符。您只需要至少一个索引标准。
- 在您的服务器上启用未编入索引的搜索。您标记了 active-directory,但我怀疑这不是您使用的,因为 AD 不使用
uid
属性。因此,在线搜索您正在使用的目录服务器,看看是否可以启用。请记住,禁用未索引搜索是默认设置是有原因的。
我不是 LDAP 专家,我只是想 运行 对用户进行一些过滤,比如让用户以某个前缀开头。每次我在过滤器 [LDAP: error code 53 - Unwilling to process the unindexed search operation]; remaining name 'ou=internal,o=XXX,c=us'
它没有任何意义,甚至不确定该错误消息是什么意思。 传入用户名的过滤器完全匹配工作正常
String filter = "uid=exactMatchuserName";
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
constraints.setReturningAttributes(attrIdsToSearch);
NamingEnumeration users = ldapConnection().search("ou=internal,o=XXX,c=us", filter, constraints);
但是我在搜索中使用 * String filter = "uid=*ma";
然后我收到一个错误
服务器告诉您它不愿意执行不能使用索引的搜索。如果你不知道索引是什么,你可以阅读database indexes上的维基百科文章,但简而言之:
Indexes are used to quickly locate data without having to search every row in a database table every time a database table is accessed.
索引是通过按照索引中指定的方式对其中一列进行排序而建立的(对于字符串列,通常是按字母顺序排列)。因此,例如,如果我搜索 uid=gabriel
,它不需要查看目录中的每个用户。它可以直接跳到 G 并快速找到它。
但是,这意味着索引只能在您至少知道第一个字母时使用。当你在搜索的开头使用通配符时,你不知道第一个字母,所以不可能使用索引,它需要检查目录中的每个用户是否匹配。
您有 3 个选项:
- 不要在开头放置通配符。
- 向使用索引属性的查询添加另一个条件,然后您将能够在
uid
中使用通配符。您只需要至少一个索引标准。 - 在您的服务器上启用未编入索引的搜索。您标记了 active-directory,但我怀疑这不是您使用的,因为 AD 不使用
uid
属性。因此,在线搜索您正在使用的目录服务器,看看是否可以启用。请记住,禁用未索引搜索是默认设置是有原因的。