Belajar LDAP - Search & Filters
Episode 9 of 31

Belajar LDAP - Search & Filters

Membaca data direktori secara cerdas: scope pencarian base, one, sub, dan children, operator filter perbandingan dan logika, contoh filter gabungan siap pakai, seleksi atribut, serta praktik menjaga performa pencarian.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 8 kalian belajar mengubah dan menghapus data. Episode 9 membahas kemampuan yang paling sering dipakai sehari-hari: membaca data secara cerdas. Kalian akan mempelajari scope pencarian, menyusun filter dengan operator perbandingan dan logika, memilih atribut yang diminta, serta memahami batasan performa pencarian di slapd.

Scope Pencarian

Scope menentukan seberapa jauh pencarian menjangkau dari base DN:

ScopeNilai -sHasil
Base-s baseHanya entry di base DN itu sendiri
One-s oneEntry anak langsung base, tanpa base
Sub-s subBase dan seluruh keturunannya
Children-s childrenSemua keturunan, tanpa base

Perbedaan utama ada di one dan sub: one hanya satu tingkat di bawah, sub menelusuri sampai ke daun. Contoh perbandingan:

Membandingkan scope
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b dc=example,dc=com -s base "(objectClass=*)"
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b dc=example,dc=com -s one "(objectClass=*)"
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b dc=example,dc=com -s sub "(objectClass=*)"

Dengan base dc=example,dc=com, -s base hanya mengembalikan domain entry itu sendiri, -s one mengembalikan OU di bawahnya, dan -s sub mengembalikan semuanya termasuk semua user dan grup.

Filter Dasar

Filter adalah jantung pencarian LDAP. Setiap filter ditulis dalam kurung, misal (uid=budi). Operator dasar:

OperatorContohArti
Kesetaraan =(uid=budi)Nilai persis sama
Substring *(cn=John*)Awalan, akhiran, atau bagian tengah
Lebih besar >=(uidNumber>=1000)Lebih besar atau sama
Lebih kecil <=(uidNumber<=2000)Lebih kecil atau sama
Keberadaan =*(mail=*)Atribut ada nilainya
Mendekati ~=(sn~=santoso)Mirip, biasanya tanpa index

Contoh pemakaian dalam ldapsearch:

Filter substring
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "(cn=Budi*)"

Filter (cn=Budi*) mencari semua entry yang cn-nya diawali Budi. Wildcard bisa dipakai di depan, tengah, atau belakang: *@example.com, Bu*i, *Pratama.

Operator Logika

Untuk kombinasi, pakai tiga operator logika:

OperatorSimbolSemantik
AND&Semua kondisi terpenuhi
OR``
NOT!Negasi kondisi

Filter gabungan membungkus beberapa filter dalam satu pasang kurung:

Kombinasi logika
(&(objectClass=person)(mail=*@example.com))
(|(uid=budi)(uid=sari))
(!(mail=*))
(&(|(uid=budi)(uid=sari))(objectClass=posixAccount))

Aturan praktis: AND menyatukan syarat, OR menyatukan alternatif, dan negasi sering dipakai untuk "semua kecuali". Filter boleh ditumpuk sedalam apa pun, asal kurungnya tetap seimbang.

Contoh Filter Praktis

Beberapa kombinasi yang langsung berguna di direktori nyata:

Filter siap pakai
(uid=john)
(cn=John*)
(&(objectClass=person)(mail=*@example.com))
(|(uid=john)(uid=jane))
(&(objectClass=posixAccount)(uidNumber>=1000))

Yang terakhir — semua akun Unix dengan UID minimal 1000 — sering dipakai untuk memisahkan user nyata dari akun sistem:

Filter di ldapsearch
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "(&(objectClass=posixAccount)(uidNumber>=1000))"

Ingat: filter hanya mencari di dalam base yang ditentukan. Kalau ingin mencakup seluruh tree, naikkan base ke dc=example,dc=com dan pakai -s sub.

Seleksi Atribut

Selain filter, kalian bisa mengontrol atribut yang dikembalikan dengan menambahkan daftar atribut setelah filter:

Meminta atribut tertentu
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "ou=People,dc=example,dc=com" "(objectClass=posixAccount)" uid mail

Aturan seleksi:

  • Daftar atribut eksplisit — hanya atribut itu yang dikembalikan.
  • * — semua atribut user.
  • + — atribut operasional seperti entryUUID, createTimestamp, dan modifyTimestamp.
  • Tanpa daftar apa pun — set default: semua atribut user, tanpa atribut operasional; userPassword hanya muncul bila ACL mengizinkan pembacaan.
Membaca atribut operasional
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "uid=budi,ou=People,dc=example,dc=com" -s base "(objectClass=*)" +

Untuk hanya melihat DN tanpa atribut, gunakan daftar atribut 1.1 — trik klasik yang hemat bandwidth.

Performa Pencarian

Filter yang "mahal" adalah filter yang tidak punya index di server. Di episode indexing nanti kalian akan membuat index untuk cn, uid, sn, mail, member, dan uidNumber. Tanpa index, slapd melakukan pemindaian penuh (full scan) yang melambat seiring membesarnya database.

Pola optimal:

  • Kombinasikan dengan AND agar mempersempit hasil — (&(objectClass=posixAccount)(uidNumber>=1000)) jauh lebih efisien daripada (objectClass=posixAccount) sendirian untuk daftar ribuan entry.
  • Letakkan atribut yang paling selektif di depan filter AND.
  • Batasi jumlah hasil di sisi klien dengan -z (jumlah entry) dan -l (detik):
Batas ukuran dan waktu
ldapsearch -z 50 -l 10 -x -D "cn=admin,dc=example,dc=com" -W -b dc=example,dc=com "(objectClass=*)"

Opsi -z 50 membatasi maksimal 50 entry, -l 10 membatasi maksimal 10 detik. Server slapd juga menegakkan batasannya sendiri melalui olcLimits, jadi nilai efektifnya adalah yang paling ketat di antara keduanya.

Tip

Kalau pencarian tiba-tiba lambat, cek dulu apakah filter memakai atribut yang sudah di-index. Filter dengan ~= (approximate) dan substring di tengah nilai jarang bisa memanfaatkan index — siapkan olcDbIndex yang sesuai sebelum data membesar.

Penutup

Episode 9 melengkapi kalian dengan bahasa query LDAP: scope base, one, sub, dan children; operator perbandingan =, *, >=, <=, =*, dan ~=; operator logika &, |, dan !; seleksi atribut termasuk atribut operasional; serta disiplin performa lewat index dan batas ukuran dan waktu.

Inti yang harus dibawa pulang:

  • Scope menentukan wilayah pencarian; sub menjangkau seluruh tree.
  • Filter selalu dalam kurung, dan logika boleh ditumpuk.
  • Minta hanya atribut yang dibutuhkan; + untuk atribut operasional.
  • Filter yang tidak di-index artinya full scan — siapkan index sejak awal.

Di episode 10 berikutnya, kita masuk ke pengamanan akses: access control list. Kalian akan mengatur siapa boleh membaca apa, siapa boleh mengubah apa, dan bagaimana menegakkan prinsip least privilege di direktori.