# 1

Σπίγγος Δημήτρης
dmtrs32@gmail.com 2012
Τσιβίκης Βασίλης
undersec.tr3los@gmail.com 2010
Μαρία Θουκυδίδου
marablack3@gmail.com 2014

# Συνδέσεις LDAP

Οι συνδέσεις LDAP είναι διαφορετικές από άλλες συνδέσεις κατά τρόπο που μια βάση δεδομένων LDAP αποθηκεύει δεδομένα με ιεραρχικό τρόπο, στο DIT (δένδρο πληροφοριών καταλόγου), ενώ άλλες βάσεις διαθέσιμες δεδομένων χρησιμοποιώντας την εφαρμογή gda-browser είναι σχεσιακές βάσεις δεδομένων.

Ως συνέπεια, οι συνδέσεις LDAP συμπεριφέρονται ειδικά: ως κανονικές συνδέσεις με πίνακες (δείτε την απεικόνιση πίνακα που εξηγείται παρακάτω) και μέσα από την παρουσία της προοπτική περιηγητή LDAP

Σημειώστε ότι οι συνδέσεις LDAP μπορεί να μην είναι διαθέσιμες είτε λόγω μη εγκατάστασης του παρόχου της βάσης δεδομένων LDAP, είτε λόγω απενεργοποίησης της υποστήριξης LDAP κατά την μεταγλώττιση.

# Απεικόνιση του πίνακα LDAP

Μέσα σε μια σύνδεση LDAP, είναι δυνατό να δηλωθούν εικονικοί πίνακες που απεικονίζονται σε μια αναζήτηση LDAP. Αυτοί οι εικονικοί πίνακες μπορούν έπειτα να χρησιμοποιηθούν όπως οποιοσδήποτε άλλος πίνακας. Η πρώτη στήλη κάθε εικονικού πίνακα θα είναι πάντοτε το DN (διακριτό όνομα) της καταχώρισης που αναπαριστάνεται στη γραμμή· οι άλλες στήλες εξαρτώνται από τον ορισμό του πίνακα.

Ένας εικονικός πίνακας LDAP ορίζεται με τα παρακάτω γνωρίσματα:

ένα όνομα πίνακα

τη βάση DN για την αναζήτηση: την καταχώριση LDAP στην οποία αρχίζει η αναζήτηση (εάν δεν οριστεί τότε το κορυφαίο επίπεδο καταχώρισης της σύνδεσης LDAP χρησιμοποιείται)

το φίλτρο αναζήτησης: ένα έγκυρο φίλτρο αναζήτησης LDAP (εάν δεν δίνεται κανένα τότε το προεπιλεγμένο φίλτρο αναζήτησης είναι "(objectClass=*)", που αιτείται οποιαδήποτε καταχώριση LDAP).

τα γνωρίσματα: τα γνωρίσματα για ανάκτηση, κάθε γνώρισμα θα απεικονιστεί σε μια στήλη του πίνακα. Τα γνωρίσματα πρέπει να ξεχωρίζονται με κόμμα στη λίστα γνωρισμάτων, όπου σε κάθε γνώρισμα μπορεί προαιρετικά να αποδίδεται ένας τύπος και μια επιλογή πολλαπλής τιμής (δείτε παρακάτω).

η εμβέλεια: η εμβέλεια αναζήτησης, "subtree" (για αναζήτηση της βάσης DN και του συνολικού υποδένδρου παρακάτω), "onelevel" (για αναζήτηση των άμεσων απογόνων της καταχώρισης βάσης DN μόνο), ή "base" (για αναζήτηση της βάσης DN μόνο)

## Ιδιότητες του πίνακα LDAP

Ιδιότητες του πίνακα LDAP

Για παράδειγμα στην παραπάνω εικόνα, ο πίνακας "users" θα "περιέχει" όλες τις καταχωρίσεις από την καταχώριση κορυφαίου επιπέδου LDAP της σύνδεσης και έχει 3 στήλες: την DN, την "cn" και την "jpegPhoto".

# Γνωρίσματα για απεικόνιση στήλών

Όπως αναφέρθηκε στην προηγούμενη ενότητα, κάθε γνώρισμα θα απεικονιστεί σε μια στήλη. Ο τύπος της στήλης προσδιορίζεται κανονικά αυτόματα (συμβολοσειρά, αριθμός, ...) αλλά μπορεί να εξαναγκαστεί προσαρτώντας στο όνομα του γνωρίσματος το "::<type>" για τον ζητούμενο τύπο.

Επίσης, επειδή κάποια γνωρίσματα μπορούν να έχουν πολλαπλές τιμές, ο πίνακας κατασκευής χειρίζεται τα γνωρίσματα πολλαπλών τιμών με διαφορετικούς τρόπους, ανάλογα με τις επιλογές κάθε γνωρίσματος. Μια επιλογή μπορεί να οριστεί με προσάρτηση του "::<option>" στο όνομα του γνωρίσματος. Έγκυρες επιλογές είναι:

"NULL" ή "0": μια τιμή NULL θα επιστραφεί για το γνώρισμα

"CSV": μια τιμή που χωρίζεται με κόμμα με όλες τις τιμές του γνωρίσματος θα επιστραφεί. Αυτό δουλεύει μόνο για τύπους γνωρίσματος συμβολοσειράς.

"MULT" ή "*": μια γραμμή θα επιστραφεί για κάθε τιμή του γνωρίσματος, πολλαπλασιάζοντας αποτελεσματικά τον αριθμό των επιστρεφόμενων γραμμών

"1": μόνο η πρώτη τιμή του γνωρίσματος θα χρησιμοποιηθεί, οι άλλες τιμές αγνοούνται

"CONCAT": οι τιμές των γνωρισμάτων συνενώνονται (με έναν χαρακτήρα νέας γραμμή μεταξύ κάθε τιμής)

"ERROR": μια τιμή σφάλματος θα επιστραφεί (αυτή η προεπιλεγμένη συμπεριφορά)

# Χρήση του SQL με συνδέσεις LDAP

Μπορείτε να χρησιμοποιήσετε το SQL που εννοείται από το SQLite σε κάθε σύνδεση LDAP. Να γνωρίζετε όμως ότι εάν ορίσετε αντικείμενα βάσης δεδομένων (έξω από το εκτεταμένο SQL που παρουσιάζεται στην επόμενη ενότητα), θα χαθούν την επόμενη φορά που η σύνδεση LDAP θα ανοίξει.

Έτσι είναι ολότελα ασφαλές για παράδειγμα να δημιουργήσετε έναν πίνακα για αποθήκευση μερικών δεδομένων LDAP που ίσως απαιτούν μια μεγάλη λειτουργία για να αποκτηθούν, αλλά μετά το κλείσιμο της σύνδεσης LDAP, ο πίνακας και τα δεδομένα του θα χαθούν.

Δείτε την ενότητα SQL που εννοείται από συνδέσεις LDAP και εικονικές συνδέσεις για περισσότερες πληροφορίες.

# Επέκταση SQL για χειρισμό πινάκων LDAP

Οι πίνακες LDAP μπορούν να δημιουργηθούν χρησιμοποιώντας ένα επεκταμένο σύνολο των εντολών SQL:

`CREATE LDAP TABLE <table_name> [BASE='<base_dn>'] [FILTER='<filter>'] [ATTRIBUTES='<filter>'] [SCOPE='<filter>']` για δήλωση ενός νέου εικονικού πίνακα LDAP

`DESCRIBE LDAP TABLE <table_name>` για εμφάνιση του ορισμού του εικονικού πίνακα LDAP

`ALTER LDAP TABLE <table_name> [BASE='<base_dn>'] [FILTER='<filter>'] [ATTRIBUTES='<filter>'] [SCOPE='<filter>']` για τροποποίηση ορισμού εικονικού πίνακα (μόνο το συγκεκριμένο μέρος τροποποιήθηκε στην πραγματικότητα)

`DROP LDAP TABLE <table_name>` για αφαίρεση ενός εικονικού πίνακα LDAP. Σημειώστε ότι ο συνηθισμένος `DROP TABLE <table_name>` μπορεί επίσης να χρησιμοποιηθεί στη θέση του.

Για παράδειγμα, ο ακόλουθος κώδικας SQL:

CREATE LDAP TABLE users FILTER='(objectClass=inetOrgPerson)' ATTRIBUTES='cn,sn,givenName,seeAlso::*' SCOPE='subtree'· SELECT * FROM users WHERE cn like '%john%'· ALTER LDAP TABLE users FILTER='(&(objectClass=inetOrgPerson)(cn=*john*))'· SELECT * FROM users· DROP LDAP TABLE users·

θα πρέπει να εμφανίσει δύο φορές τα ίδια αποτελέσματα, που προβάλουν τη λίστα όλων των καταχωρίσεων LDAP της κλάσης "inetOrgPerson" με ένα CommonName (cn) να περιέχει τη συμβολοσειρά "john".