2012-03-17 69 views
0

对于OpenLDAP数据库,我需要查找具有匹配正则表达式模式的电话号码的所有用户,并且位于给定的组织单位中。使用shell脚本的OpenLDAP正则表达式搜索

根据这个:LDAP search using regular expression这是不可能的一个ldapsearch(否则我会是第一选择)。

我想在客户端做最少的工作,查询组织单元中的所有用户,并通过grep或类似的东西来过滤它们似乎太耗费资源。有没有更好的方法来做到这一点?

另外我对shell不是很熟悉,所以我有点害怕“sed”,但是我听说它很强大,并且在正则表达式过滤中表现很好。如果我需要做过滤客户端,这将是最简单的方法(不会影响性能)?

关于批量输入。如果我在CSV文件中获得大量部分电话号码,并且每个部分号码都可能具有“prefix”/“postfix”/“regex”类型(因此它包含coloumns:type和partialnumber),那么最好是什么性能明智?

  1. 我是否应该让组织单元中的所有用户通过shell脚本过滤它们(遍历所有用户并尝试匹配任何数字)?
  2. 或者我应该对每个数字进行查询(如果在ldap查询中可能使用属性的正则表达式过滤,这只是一个可行的选项)。

在我的知识水平,第一个是要走的路,但有没有更好的解决方案?

我使用OpenLDAP 2.4.23它以任何方式。

+1

您只能通过测量进行性能比较。您尚未提供足够的信息来提供有关如何进行测量和比较的建议。 'grep'用于搜索,'sed'用于根据搜索结果进行修改。根据具体情况,任何一个都可能比另一个更快。 – 2012-03-17 17:31:09

+0

感谢您的回复。用grep和sed解决问题之间的性能差异并不是问题的重要部分,我更愿意用正则表达式来查询ldap。 – SoonDead 2012-03-17 17:48:19

回答

1

对LDAP数据使用正则表达式的结果可能不是您所期望的。 LDAP数据不是字符串,而是架构定义的特定类型的数据,应用程序必须始终检索架构以了解如何处理属性值。 telephoneNumber属性具有特定的语法,正则表达式可能不起作用。一般来说,LDAP客户端必须使用匹配规则来比较和匹配目录服务器中的数据。事实上,最佳实践是应用程序必须确保匹配规则,而不是本地语言比较运算符或正则表达式。欲了解更多信息,请参阅LDAP: Programming PracticesLDAP: Using Matching Rules