Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:01:contents:03 [2013/11/11 00:46]
127.0.0.1 external edit
saisp:labs:01:contents:03 [2014/02/18 11:43] (current)
razvan.deaconescu [03. [15p] Căutare în baza de date LDAP]
Line 1: Line 1:
-==== 03. Lorem ipsum ====+==== 03. [15p] Căutare în baza de date LDAP ====
  
-...+Output-ul comenzii de interogare LDAP a serverului ''​swarm.cs.pub.ro''​ este consistent. De multe ori dorim să căutăm în baza de date LDAP și să extragem doar anumite intrări similar comenzii ''​select''​ din SQL.
  
 +=== Informații din subarbori ===
  
 +Un prim mod de căutare este selectarea doar a intrării căutate (fără subarbore) sau doar a primului nivel din arbore, ca mai jos:<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -s base -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​
 +dn: dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: University Politehnica of Bucharest
 +dc: swarm
 +
 +
 +root@ldap-client:​~#​ ldapsearch -x -LLL -s one -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​
 +dn: cn=admin,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +
 +dn: ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +ou: People
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +ou: Group
 +objectClass:​ organizationalUnit
 +</​code>​
 +
 +Prima comandă extrage doar intrarea de bază, identificată de //domain name//-ul (DN) ''​dc=swarm,​dc=cs,​dc=pub,​dc=ro''​. A doua extrage primul nivel din arborele/​directorul LDAP, adică intrarile indentificate de DN-urile ''​cn=admin,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'',​ ''​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'',​ ''​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro''​.
 +
 +Un mod uzual de căutare este doar într-un subarbore al directorului LDAP. Astfel, dacă dorim să extragem doar intrările din grupuri, vom folosi comanda:<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​
 +dn: ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +ou: Group
 +objectClass:​ organizationalUnit
 +
 +dn: cn=rosedu,​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +cn: rosedu
 +[...]
 +</​code>​
 +
 +=== Extragere de atribute ===
 +
 +Așa cum comanda ''​select''​ din SQL extrage doar anumite coloane dintr-un tabel, putem selecta, folosind comanda ''​ldapsearch''​ anumite atribute ale intrărilor în baza de date LDAP.
 +
 +Spre exemplu, dacă vrem să afișăm doar uid-ul utilizatorilor din baza de date LDAP, vom folosi comanda<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid
 +[...]
 +dn: uid=ddvlad,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: ddvlad
 +
 +dn: uid=roxanam,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: roxanam
 +
 +dn: uid=razvan,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: razvan
 +</​code>​
 +
 +Folosirea atributului ''​uid''​ la sfârșitul comenzii de mai sus înseamnă selectarea doar a acelui câmp.
 +
 +<​note>​
 +Câmpul ''​dn''​ va fi întotdeauna selectat pentru că indică în mod unic intrarea în LDAP.
 +</​note>​
 +
 +Dacă dorim să selectăm uid-ul, adresa de e-mail și numele vom folosi comanda<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid mail cn
 +[...]
 +dn: uid=ddvlad,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: ddvlad
 +cn: Vlad Dogaru
 +mail: XXXXXXX
 +
 +dn: uid=roxanam,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: roxanam
 +cn: Roxana Murarus
 +mail: XXXXXXX
 +
 +dn: uid=razvan,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: razvan
 +cn: Razvan Deaconescu
 +mail: XXXXXXX
 +</​code>​
 +
 +Altfel spus, pentru a selecta mai multe atribute le transmitem ca argument comenzii ''​ldapsearch''​.
 +
 +=== Filtrare după atribute ===
 +
 +În SQL, clauza ''​where''​ permite selectarea doar anumitor intrări. La fel permite și comanda ''​ldapsearch''​ folosirea de filtre de căutare.
 +
 +Astfel, pentru a selecta intrările de utilizator al căror prenume este ''​Silviu''​ vom folosi comanda<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ givenName=Silviu
 +dn: uid=silviu,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: silviu
 +cn: Silviu Grijincu
 +[...]
 +</​code>​
 +
 +Dacă vrem să aflăm informații despre contul aferent lui Mihai Carabaș, și nu știm uid-ul său, vom folosi comanda<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ cn="​Mihai Carabas"​
 +dn: uid=mihaic,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: mihaic
 +sn: Carabas
 +[...]
 +</​code>​
 +
 +Dacă știam uid-ul căutam direct după uid:<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid=mihaic
 +dn: uid=mihaic,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: mihaic
 +sn: Carabas
 +[...]
 +</​code>​
 +
 +Filtrele de căutare (//search filters//) sunt expresii care fac match pe anumite atribute din intrările LDAP și le afișează doar pe acelea. Filtrele pot conține și //​glob//​-uri pentru a permite match pe mai multe valori ale atributelor. Astfel, pentru a selecta toate persoanele al căror nume de familie începe cu șirul ''​An''​ folosim expresia:<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="​An*"​
 +dn: uid=aandrei,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +uid: aandrei
 +cn: Alexandru Andrei
 +sn: Andrei
 +[...]
 +</​code>​
 +Atributul ''​sn''​ înseamnă numele de familie (//​surname//​) iar //glob//-ul ''​An*''​ însemnă șirurile care încep cu ''​An''​.
 +
 +La fel cum comanda ''​select''​ este combinată cu ''​where'',​ vom putea selecta doar anumite atribute ale unor intrări. Dacă dorim să afișăm dar cn-ul și e-mail-ul rezultatelor comenzii de mai sus, vom folosi comanda<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="​An*"​ cn mail
 +dn: uid=aandrei,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro
 +cn: Alexandru Andrei
 +mail: XXXXXXX
 +[...]
 +</​code>​
 +În cazul acesta, după comanda de căutare am precizat filtrul de căutare (''​sn="​An*"''​) și apoi atributele care vor fi selectate (''​cn mail''​).
 +
 +=== Exerciții de căutare ===
 +
 +Realizați următoarele căutări în baza de date LDAP de pe ''​swarm.cs.pub.ro'':​
 +  - Extrageți utilizatorii al căror nume de familie este ''​Popescu''​.
 +  - Extrageți uid-ul și cn-ul utilizatorilor a căror adresă de e-mail conține șirul ''​@cti.pub.ro''​.
 +  - Extrageți utilizatorii al căror nume de familie nu se termină în ''​escu''​.
 +  - Extrageți utilizatorii al căror prenume este ''​Vlad''​ **sau** ''​Andrei''​.
 +  - Extrageți uid-ul, e-mail-ul și numele de familie al utilizatorilor al căror prenume este ''​Vlad''​ sau ''​Andrei''​.
 +
 +<note important>​
 +Detalii legate de folosirea filtrelor de căutare găsiți la pagina http://​www.centos.org/​docs/​5/​html/​CDS/​ag/​8.0/​Finding_Directory_Entries-LDAP_Search_Filters.html.
 +
 +Este recomandat să puneți expresiile de filtrare între apostroafe sau ghilimele ca să preveniți interpretarea caracterelor speciale de shell.
 +</​note>​
 +
 +<​solution -hidden>
 +Comenzile care realizează căutările cerute mai sus sunt:<​code bash>
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="​Popescu"​
 +
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ mail="​*@cti.pub.ro*"​
 +
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(!(sn=*escu))'​
 +
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(|(givenName=Vlad)(givenName=Andrei))'​
 +
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(|(givenName=Vlad)(givenName=Andrei))'​ uid mail sn
 +</​code>​
 +</​solution>​
saisp/labs/01/contents/03.1384123597.txt.gz · Last modified: 2014/01/24 18:49 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0