Sintaks Filter Pencarian

Filter pencarian memungkinkan Anda menentukan kriteria pencarian dan menyediakan pencarian yang lebih efisien dan efektif.

ADSI mendukung filter pencarian LDAP seperti yang didefinisikan dalam RFC2254. Filter pencarian ini diwakili oleh string Unicode. Tabel berikut mencantumkan beberapa contoh filter pencarian LDAP.

Filter pencarian Deskripsi
"(objectClass=*)" Semua objek.
"(&(objectCategory=person)(objectClass=user)(!( cn=andy))))" Semua objek pengguna tetapi "andy".
"(sn=sm*)" Semua objek dengan nama keluarga yang dimulai dengan "sm".
"(&(objectCategory=person)(objectClass=contact)(|( sn=Smith)(sn=Johnson))))" Semua kontak dengan nama keluarga yang sama dengan "Smith" atau "Johnson".

 

Filter pencarian ini menggunakan salah satu format berikut.

<filter>=(<attribute><operator><value>)

or

<filter>=(<operator><filter1><filter2>)

Filter pencarian ADSI digunakan dalam dua cara. Mereka membentuk bagian dari dialek LDAP untuk mengirimkan kueri melalui penyedia OLE DB. Mereka juga digunakan dengan antarmuka IDirectorySearch.

Operator

Tabel berikut ini mencantumkan operator filter pencarian yang sering digunakan.

Operator logis Deskripsi
= Sama dengan
~= Kira-kira sama dengan
<= Secara leksikografis kurang dari atau sama dengan
>= Secara leksikografis lebih besar dari atau sama dengan
& AND
| ATAU
! TIDAK

 

Selain operator di atas, LDAP mendefinisikan dua pengidentifikasi objek aturan (OID) yang cocok yang dapat digunakan untuk melakukan perbandingan bitwise dari nilai numerik. Aturan pencocokan memiliki sintaks berikut.

<attribute name>:<matching rule OID>:=<value>

"<nama> atribut" adalah lDAPDisplayName dari atribut, "<rule OID>" adalah OID untuk aturan yang cocok, dan "<nilai>" adalah nilai yang digunakan untuk perbandingan. Ketahuilah bahwa spasi tidak dapat digunakan dalam string ini. "<nilai>" harus berupa angka desimal; tidak boleh berupa angka heksadesimal atau nama konstanta seperti ADS_GROUP_TYPE_SECURITY_ENABLED. Untuk informasi selengkapnya tentang atribut Direktori Aktif yang tersedia, lihat Semua Atribut.

Tabel berikut mencantumkan OID aturan yang cocok yang diterapkan oleh LDAP.

OID aturan yang cocok Pengidentifikasi string (dari Ntldap.h) Deskripsi
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND Kecocokan hanya ditemukan jika semua bit dari atribut cocok dengan nilai. Aturan ini setara dengan operator BITWISE AND .
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR Kecocokan ditemukan jika ada bit dari atribut yang cocok dengan nilai. Aturan ini setara dengan operator OR bitwise.
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN Aturan ini terbatas pada filter yang berlaku untuk DN. Ini adalah operator pertandingan "diperluas" khusus yang berjalan rantai leluhur dalam objek hingga ke akar hingga menemukan kecocokan.

 

Contoh string kueri berikut mencari objek grup yang memiliki set bendera ADS_GROUP_TYPE_SECURITY_ENABLED . Ketahuilah bahwa nilai desimal ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648) digunakan untuk nilai perbandingan.

(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))

LDAP_MATCHING_RULE_IN_CHAIN adalah OID aturan yang cocok yang dirancang untuk menyediakan metode untuk mencari leluhur objek. Banyak aplikasi yang menggunakan AD dan AD LDS biasanya bekerja dengan data hierarkis, yang diurutkan oleh hubungan induk-anak. Sebelumnya, aplikasi melakukan ekspansi grup transitif untuk mencari tahu keanggotaan grup, yang menggunakan terlalu banyak bandwidth jaringan; aplikasi perlu membuat beberapa perjalanan pulang pergi untuk mencari tahu apakah objek jatuh "dalam rantai" jika tautan dilalui hingga akhir.

Contoh kueri seperti itu adalah kueri yang dirancang untuk memeriksa apakah pengguna "user1" adalah anggota grup "group1". Anda akan mengatur basis ke DN (cn=user1, cn=users, dc=x) pengguna dan cakupan ke base, dan menggunakan kueri berikut.

(memberof:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)

Demikian pula, untuk menemukan semua grup yang "user1" adalah anggota, atur basis ke DN kontainer grup; misalnya (OU=groupsOU, dc=x) dan cakupan ke subtree, dan gunakan filter berikut.

(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)

Perhatikan bahwa saat menggunakan LDAP_MATCHING_RULE_IN_CHAIN, cakupan tidak terbatas—bisa berupa base, , one-levelatau subtree. Beberapa kueri tersebut pada subtree mungkin lebih intensif prosesor, seperti mengejar tautan dengan fan-out tinggi; artinya, mencantumkan semua grup tempat pengguna menjadi anggota. Pencarian yang tidak efisien akan mencatat pesan log peristiwa yang sesuai, seperti jenis kueri lainnya.

Wildcard

Anda juga dapat menambahkan wildcard dan kondisi ke filter pencarian LDAP. Contoh berikut menunjukkan substring yang dapat digunakan untuk mencari direktori.

Dapatkan semua entri:

(objectClass=*)

Dapatkan entri yang berisi "bob" di suatu tempat dengan nama umum:

(cn=*bob*)

Dapatkan entri dengan nama umum yang lebih besar dari atau sama dengan "bob":

(cn>='bob')

Dapatkan semua pengguna dengan atribut email:

(&(objectClass=user)(email=*))

Dapatkan semua entri pengguna dengan atribut email dan nama keluarga yang sama dengan "smith":

(&(sn=smith)(objectClass=user)(email=*))

Dapatkan semua entri pengguna dengan nama umum yang dimulai dengan "andy", "steve", atau "margaret":

(&(objectClass=user)(| (cn=andy*)(cn=steve*)(cn=margaret*)))

Dapatkan semua entri tanpa atribut email:

(!(email=*))

Definisi formal filter pencarian adalah sebagai berikut (dari RFC 2254):

<filter> ::= '(' <filtercomp> ')'
<filtercomp> ::= <and> | <or> | <not> | <item>
<and> ::= '&' <filterlist>
<or> ::= '|' <filterlist>
<not> ::= '!' <filter>
<filterlist> ::= <filter> | <filter> <filterlist>
<item>::= <simple> | <present> | <substring>
<simple> ::= <attr> <filtertype> <value>
<filtertype> ::= <equal> | <approx> | <ge> | <le>
<equal> ::= '='
<approx> ::= '~='
<ge> ::= '>='
<le> ::= '<='
<present> ::= <attr> '=*'
<substring> ::= <attr> '=' <initial> <any> <final>
<initial> ::= NULL | <value><any> ::= '*' <starval>
<starval> ::= NULL | <value>'*' <starval>
<final> ::= NULL | <value>

Attr> token <adalah string yang mewakili AttributeType. Nilai token <> adalah string yang mewakili AttributeValue yang formatnya ditentukan oleh layanan direktori yang mendasar.

<Jika nilai> harus berisi karakter tanda bintang (*), tanda kurung kiri ((), atau kurung kanan ()), karakter harus didahului oleh karakter escape garis miring terbalik (\).

Karakter Khusus

Jika salah satu karakter khusus berikut harus muncul di filter pencarian sebagai harfiah, karakter tersebut harus digantikan oleh urutan escape yang tercantum.

Karakter ASCII Pengganti urutan escape
* \2a
( \28
) \29
\ \5c
NUL \00
/ \2f

 

Catatan

Dalam kasus di mana Set Karakter MultiByte sedang digunakan, urutan escape yang tercantum di atas harus digunakan jika pencarian dilakukan oleh ADO dengan dialek SQL.

 

Selain itu, data biner arbitrer dapat diwakili dengan menggunakan sintaks urutan escape dengan mengodekan setiap byte data biner dengan garis miring terbalik (\) diikuti oleh dua digit heksadesimal. Misalnya, nilai empat byte 0x00000004 dikodekan sebagai \00\00\00\04 dalam string filter.

Dialek LDAP

Dialek SQL

Mencari dengan Antarmuka IDirectorySearch

Mencari dengan Objek Data ActiveX

Mencari dengan OLE DB