2014-12-16 5 views
0

필자는 openldap 구현을 사용하는 조직의 LDAP에 읽기 전용 사용자가 있지만, 트리의 구조를 정확히 알지는 못한다. 그러나 보고타, 메 델린, 팔미라 (아래의 많은 조직 구성 단위가 있음을 알고있다. 차례로 조직의 밑에는 xxx.edu.co). 두 번째 수준 (bogota, medellin, palmira) 조직의 아래에있는 각 people 조직 단위에 employeeNumber이라는 다른 속성을 사용하는 사람들의 검색 uid에 관심이 있습니다. ,ldap을 통한 검색을 최적화하는 방법은 무엇입니까?

ldapsearch -h secret.xxx.edu.co -D 'uid=myUser,ou=Institucional,o=bogota,o=xxx.edu.co' -w myPass -x -b 'ou=People,o=bogota,o=xxx.edu.co' '(&(employeeNumber=123485))' 

이의 문제가 내 조직이 내가 검색이 매우 빠르고 UID를 사용하여 검색하면 검색이 매우 매우 느립니다 이상 40000 사용자와 계산하는 효율성 고체를 주어집니다 : 나는 통해이 achive 수 있습니다 나는 그 나무가 'uid'또는 그와 비슷한 것으로 정렬되어 있다고 생각합니다. 요점은 정확히 uid가 내 객관적이라는 것입니다. 추가적으로 검색하는 사람의 uid의 대략적인 형식을 알고 있습니다. 예를 들어 employeeNumber = 12345 인 Pepito Pérez의 uid를 검색하는 경우 'p'로 시작하십시오.

이 문제의 성능을 어떻게 향상시킬 수 있습니까?

인덱스 된 uid 속성에서 regexp로 트리를 필터링하는 것과 같고이 하위 집합에서 employeeNumber를 검색 한 후에 좋은 성능을 얻을 수 있다고 생각합니다. ldap에서 관리자 권한이 필요없는 접근 방식이 필요합니다.

답변

0

employeeNumber 속성에 equality 색인이 추가 된 것 같습니다. 이렇게하면 위의 검색을 uid 검색과 함께 수행 할 수 있습니다.

uid 부분을 효율적으로 일치 시키려면 uid 속성에 substring 색인이 필요합니다.

이외에도 필터 (&(employeeNumber=123485))(employeeNumber=123485)으로 간단히 나타낼 수 있습니다. and (&)에는 단 하나의 절이 있으므로 필요하지 않습니다. 적절한 인덱스를 가지고 있다면이 같은 필터를 사용하여 검색을 수행 할 수

...

(&(employeeNumber=123485)(uid=p*))

그것은 정확하게 당신이 원하는 당신을 얻을 것이다.

+0

효과적으로 읽기 권한이있는 사용자가없는 경우 employeeNumber에 추가 된 동등 색인이 내 문제에 대한 이상적인 솔루션입니다. – jaundavid

+1

그래서 색인 된 내용을 전혀 제어 할 수 없습니까? 그게 사실이고 당신은 단지 40,000 항목을 가지고, 나는 그들 모두에 대한 열쇠를 잡을 것이고 단지 열쇠를 매핑하는 로컬 데이터베이스를 만들 것입니다. 난 그냥 employeeNumber 및 디렉토리 고유 ID를 유지할 것이다; 이것들은 바뀌지 않을 것입니다. 주기적으로 항목을 새로 작성하여 최신 상태로 유지하십시오. employeeNumber로 사용자를 검색해야 할 경우 로컬 변환을 수행하고 대신 고유 한 ID로 검색하십시오. 찾을 수 없다면 employeeNumber에 의한 사용자 검색을 수행하고 마지막 동기화 이후 createtime으로 제어하십시오. –