Έλεγχοι πρόσβασης για χρήστες και ρόλους σε SQL

Η ασφάλεια είναι υψίστης σημασίας για τους διαχειριστές βάσεων δεδομένων που επιδιώκουν να προστατεύσουν τα gigabyte των ζωτικών επιχειρηματικών δεδομένων τους από τα αδιάκριτα βλέμματα των μη εξουσιοδοτημένων ξένων και των εσωτερικών που προσπαθούν να ξεπεράσουν την εξουσία τους. Όλα τα συστήματα διαχείρισης σχεσιακών βάσεων δεδομένων παρέχουν κάποιο είδος εγγενών μηχανισμών ασφαλείας που έχουν σχεδιαστεί για να ελαχιστοποιούν αυτές τις απειλές. Αυτά κυμαίνονται από την απλή προστασία με κωδικό που προσφέρεται από τη Microsoft Access στη σύνθετη δομή χρήστη / ρόλου που υποστηρίζεται από προηγμένες σχεσιακές βάσεις δεδομένων όπως το Oracle και το Microsoft SQL Server. Αυτό το άρθρο επικεντρώνεται στους μηχανισμούς ασφαλείας που είναι κοινές σε όλες τις βάσεις δεδομένων που εφαρμόζουν τη Δομημένη γλώσσα ερωτήματος ( SQL ). Μαζί, θα προχωρήσουμε στη διαδικασία ενίσχυσης των ελέγχων πρόσβασης δεδομένων και διασφάλισης της ασφάλειας των δεδομένων σας.

Χρήστες

Οι βάσεις δεδομένων που βασίζονται σε διακομιστές υποστηρίζουν όλα μια έννοια χρήστη παρόμοια με εκείνη που χρησιμοποιείται στα λειτουργικά συστήματα υπολογιστών. Εάν γνωρίζετε την ιεραρχία χρήστη / ομάδας που βρίσκεται στα Microsoft Windows NT και Windows 2000, θα διαπιστώσετε ότι οι ομάδες χρηστών / ρόλων που υποστηρίζονται από τον SQL Server και την Oracle είναι πολύ παρόμοιες.

Συνιστάται ιδιαίτερα να δημιουργείτε μεμονωμένους λογαριασμούς χρήστη βάσης δεδομένων για κάθε άτομο που θα έχει πρόσβαση στη βάση δεδομένων σας. Είναι τεχνικά δυνατό να μοιράζεστε λογαριασμούς μεταξύ χρηστών ή απλά να χρησιμοποιείτε έναν λογαριασμό χρήστη για κάθε τύπο χρήστη που χρειάζεται να έχει πρόσβαση στη βάση δεδομένων σας, αλλά αποθαρρύνω έντονα αυτή την πρακτική για δύο λόγους. Πρώτον, θα εξαλείψει την ατομική ευθύνη - εάν ένας χρήστης κάνει μια αλλαγή στη βάση δεδομένων σας (ας πούμε, δίνοντας τον εαυτό σας μια αύξηση $ 5.000), δεν θα μπορείτε να τον εντοπίσετε πίσω σε ένα συγκεκριμένο άτομο μέσω της χρήσης αρχείων καταγραφής ελέγχου. Επιπλέον, εάν ένας συγκεκριμένος χρήστης εγκαταλείψει τον οργανισμό σας και θέλετε να καταργήσετε την πρόσβασή του από τη βάση δεδομένων, θα αναγκαστείτε να αλλάξετε τον κωδικό πρόσβασης που βασίζονται σε όλους τους χρήστες.

Οι μέθοδοι για τη δημιουργία λογαριασμών χρηστών ποικίλλουν από πλατφόρμα σε πλατφόρμα και θα πρέπει να συμβουλευτείτε την τεκμηρίωσή σας για το συγκεκριμένο DBMS για την ακριβή διαδικασία. Οι χρήστες του Microsoft SQL Server πρέπει να διερευνήσουν τη χρήση της αποθηκευμένης διαδικασίας sp_adduser. Οι διαχειριστές βάσεων δεδομένων της Oracle θα βρουν χρήσιμη την εντολή CREATE USER. Μπορεί επίσης να θέλετε να διερευνήσετε εναλλακτικά συστήματα επαλήθευσης ταυτότητας. Για παράδειγμα, ο Microsoft SQL Server υποστηρίζει τη χρήση της Integrated Security των Windows NT. Σύμφωνα με αυτό το σύστημα, οι χρήστες αναγνωρίζονται στη βάση δεδομένων από τους λογαριασμούς χρηστών των Windows NT και δεν απαιτείται να εισάγουν πρόσθετο αναγνωριστικό χρήστη και κωδικό πρόσβασης για να έχουν πρόσβαση στη βάση δεδομένων. Αυτή η προσέγγιση είναι εξαιρετικά δημοφιλής μεταξύ των διαχειριστών βάσεων δεδομένων επειδή μετατοπίζει το βάρος της διαχείρισης λογαριασμού στο προσωπικό της διοίκησης δικτύου και παρέχει την ευκολία μιας ενιαίας σύνδεσης στον τελικό χρήστη.

Ρόλοι

Εάν βρίσκεστε σε περιβάλλον με μικρό αριθμό χρηστών, πιθανόν να διαπιστώσετε ότι η δημιουργία λογαριασμών χρηστών και η ανάθεση δικαιωμάτων απευθείας σε αυτά είναι επαρκής για τις ανάγκες σας. Ωστόσο, αν έχετε μεγάλο αριθμό χρηστών, πιθανότατα θα είστε συγκλονισμένοι από το βάρος της διατήρησης λογαριασμών και των κατάλληλων αδειών. Για να διευκολυνθεί αυτό το βάρος, οι σχεσιακές βάσεις δεδομένων υποστηρίζουν την έννοια των ρόλων. Οι ρόλοι βάσης δεδομένων λειτουργούν παρόμοια με τις ομάδες των Windows NT. Οι λογαριασμοί χρηστών έχουν εκχωρηθεί σε ρόλους και οι άδειες κατανέμονται στη συνέχεια στο ρόλο ως σύνολο και όχι στους μεμονωμένους λογαριασμούς χρηστών. Για παράδειγμα, θα μπορούσαμε να δημιουργήσουμε έναν ρόλο DBA και στη συνέχεια να προσθέσουμε τους λογαριασμούς χρήστη του διοικητικού προσωπικού μας σε αυτό το ρόλο. Αφού το κάναμε αυτό, μπορούμε να εκχωρήσουμε μια συγκεκριμένη άδεια σε όλους τους παρόντες (και μελλοντικούς) διαχειριστές, απλώς αναθέτοντας την άδεια στο ρόλο. Για άλλη μια φορά, οι διαδικασίες δημιουργίας ρόλων διαφέρουν από πλατφόρμα σε πλατφόρμα. Οι διαχειριστές του MS SQL Server θα πρέπει να διερευνήσουν την αποθηκευμένη διαδικασία sp_addrole ενώ τα DBAs της Oracle θα πρέπει να χρησιμοποιούν τη σύνταξη CREATE ROLE.

Χορήγηση αδειών

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

Εδώ είναι η σύνταξη της δήλωσης:

GRANT <δικαιώματα>
[ON

]
TO <χρήστης / ρόλος>
[ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ]

Τώρα, ας ρίξουμε μια ματιά σε αυτή τη δήλωση γραμμή-από-γραμμή. Η πρώτη γραμμή, GRANT , μας επιτρέπει να καθορίσουμε τα συγκεκριμένα δικαιώματα πίνακα που χορηγούμε. Αυτά μπορεί να είναι είτε δικαιώματα επιπέδου πίνακα (όπως SELECT, INSERT, UPDATE και DELETE) είτε δικαιώματα βάσης δεδομένων (όπως CREATE TABLE, ALTER DATABASE και GRANT). Μπορούν να παραχωρηθούν περισσότερα από ένα δικαιώματα σε μια μόνο δήλωση GRANT, αλλά τα δικαιώματα επιπέδου και επιπέδου βάσης δεδομένων σε επίπεδο πίνακα ενδέχεται να μην συνδυάζονται σε μία μόνο δήλωση.

Η δεύτερη γραμμή, ON

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

Τέλος, η τέταρτη γραμμή, ΜΕ ΕΠΙΧΕΙΡΗΜΑΤΙΚΗ ΕΠΙΛΟΓΗ, είναι προαιρετική. Εάν αυτή η γραμμή περιλαμβάνεται στη δήλωση, ο χρήστης που επηρεάζεται μπορεί επίσης να παραχωρήσει τα ίδια δικαιώματα σε άλλους χρήστες. Σημειώστε ότι δεν μπορεί να καθοριστεί η επιλογή WITH GRANT OPTION όταν οι άδειες εκχωρούνται σε ένα ρόλο.

Παραδείγματα

Ας δούμε μερικά παραδείγματα. Στο πρώτο μας σενάριο, προσλάβαμε πρόσφατα μια ομάδα 42 φορέων καταχώρησης δεδομένων που θα προσθέτουν και θα διατηρούν αρχεία πελατών. Πρέπει να έχουν πρόσβαση στις πληροφορίες στον πίνακα πελατών, να τροποποιήσουν αυτές τις πληροφορίες και να προσθέσουν νέες εγγραφές στον πίνακα. Δεν θα πρέπει να μπορούν να διαγράψουν πλήρως μια εγγραφή από τη βάση δεδομένων. Πρώτον, πρέπει να δημιουργήσουμε λογαριασμούς χρήστη για κάθε χειριστή και στη συνέχεια να τις προσθέσουμε σε ένα νέο ρόλο, DataEntry. Στη συνέχεια, θα πρέπει να χρησιμοποιήσουμε την ακόλουθη πρόταση SQL για να της δώσουμε τα κατάλληλα δικαιώματα:

ΕΠΙΛΟΓΗ GRANT, ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ
ON Πελάτες
Στο DataEntry

Και αυτό είναι όλο που υπάρχει! Τώρα εξετάστε μια περίπτωση όπου εκχωρούμε δικαιώματα σε επίπεδο βάσης δεδομένων. Επιθυμούμε να επιτρέψουμε στα μέλη του ρόλου DBA να προσθέσουν νέους πίνακες στη βάση δεδομένων μας. Επιπλέον, θέλουμε να είναι σε θέση να παραχωρήσουν στους άλλους χρήστες την άδεια να κάνουν το ίδιο. Εδώ είναι η δήλωση SQL:

ΠΙΝΑΚΑΣ ΔΗΜΙΟΥΡΓΙΑΣ ΓΡΑΜΜΗΣ
ΣΤΟ DBA
ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ

Παρατηρήστε ότι έχουμε συμπεριλάβει τη γραμμή WITH GRANT OPTION για να βεβαιωθείτε ότι οι DBA μας μπορούν να εκχωρήσουν αυτό το δικαίωμα σε άλλους χρήστες.

Κατάργηση δικαιωμάτων

Μόλις χορηγήσουμε δικαιώματα, συχνά αποδεικνύεται απαραίτητο να τα ανακαλέσουμε αργότερα. Ευτυχώς, η SQL μας παρέχει την εντολή REVOKE για να καταργήσουμε τα προηγούμενα χορηγούμενα δικαιώματα. Εδώ είναι η σύνταξη:

ΑΠΑΓΟΡΕΥΣΤΕ [ΕΠΙΛΟΓΗ ΕΓΓΡΑΦΗΣ ΓΙΑ] <δικαιώματα>
ON


FROM <χρήστης / ρόλος>

Θα παρατηρήσετε ότι η σύνταξη αυτής της εντολής είναι παρόμοια με αυτή της εντολής GRANT. Η μόνη διαφορά είναι ότι με το GRANT OPTION καθορίζεται στη γραμμή εντολών REVOKE και όχι στο τέλος της εντολής. Για παράδειγμα, ας φανταστούμε ότι θέλουμε να ανακαλέσουμε το προηγουμένως παραχωρηθέν δικαίωμα της Μαρίας να καταργήσει αρχεία από τη βάση δεδομένων Πελατών. Θα χρησιμοποιήσαμε την ακόλουθη εντολή:

ΑΠΑΓΟΡΕΥΣΤΕ ΔΙΑΓΡΑΦΗ
ON Πελάτες
Από τη Μαρία

Και αυτό είναι όλο που υπάρχει! Υπάρχει ένας επιπλέον μηχανισμός που υποστηρίζεται από τον Microsoft SQL Server που αξίζει να αναφερθεί - η εντολή DENY. Αυτή η εντολή μπορεί να χρησιμοποιηθεί για να απορρίψει ρητώς μια άδεια σε έναν χρήστη που διαφορετικά θα μπορούσε να έχει μέσω μιας τρέχουσας ή μελλοντικής συμμετοχής σε ρόλο. Εδώ είναι η σύνταξη:

DENY <δικαιώματα>
ON


TO <χρήστης / ρόλος

Παραδείγματα

Επιστρέφοντας στο προηγούμενο παράδειγμα μας, ας φανταστούμε ότι η Μαρία ήταν επίσης μέλος του ρόλου των Διευθυντών που είχε επίσης πρόσβαση στον πίνακα Πελατών. Η προηγούμενη δήλωση REVOKE δεν αρκεί για να αρνηθεί την πρόσβασή της στο τραπέζι. Θα αφαιρέσει την άδεια που της έχει χορηγηθεί μέσω μιας δήλωσης GRANT που στοχεύει στο λογαριασμό χρήστη της, αλλά δεν θα επηρεάσει τα δικαιώματα που αποκτήθηκαν μέσω της συμμετοχής της στο ρόλο των διαχειριστών. Ωστόσο, εάν χρησιμοποιήσουμε μια δήλωση DENY, θα εμποδίσει την κληρονομιά της. Εδώ είναι η εντολή:

ΣΗΜΕΙΩΣΗ ΣΦΑΛΜΑΤΩΝ
ON Πελάτες
ΠΡΟΣ ΤΗΝ ΠΑΙΔΙΑ

Η εντολή DENY ουσιαστικά δημιουργεί μια "αρνητική άδεια" στα στοιχεία ελέγχου πρόσβασης της βάσης δεδομένων. Αν αργότερα αποφασίσουμε να δώσουμε στην Mary την άδεια να αφαιρέσει σειρές από τον πίνακα Πελατών, δεν μπορούμε απλά να χρησιμοποιήσουμε την εντολή GRANT. Αυτή η εντολή θα αντικατασταθεί αμέσως από το υπάρχον DENY. Αντ 'αυτού, θα χρησιμοποιήσαμε πρώτα την εντολή REVOKE για να καταργήσουμε την αρνητική καταχώρηση δικαιωμάτων ως εξής:

ΑΠΑΓΟΡΕΥΣΤΕ ΔΙΑΓΡΑΦΗ
ON Πελάτες
Από τη Μαρία

Θα παρατηρήσετε ότι αυτή η εντολή είναι ακριβώς η ίδια με αυτή που χρησιμοποιείται για να αφαιρέσετε μια θετική άδεια. Θυμηθείτε ότι οι εντολές DENY και GRANT λειτουργούν με παρόμοιο τρόπο * και δημιουργούν δικαιώματα (θετικά ή αρνητικά) στον μηχανισμό ελέγχου πρόσβασης της βάσης δεδομένων. Η εντολή REVOKE καταργεί όλα τα θετικά και αρνητικά δικαιώματα για τον συγκεκριμένο χρήστη. Μόλις εκδοθεί αυτή η εντολή, η Mary θα μπορέσει να διαγράψει σειρές από τον πίνακα αν είναι μέλος ενός ρόλου που διαθέτει αυτή την άδεια. Εναλλακτικά, μπορεί να εκδοθεί μια εντολή GRANT για την παροχή της άδειας DELETE απευθείας στον λογαριασμό της.

Σε όλη τη διάρκεια αυτού του άρθρου, έχετε μάθει μια καλή συμφωνία σχετικά με τους μηχανισμούς ελέγχου πρόσβασης που υποστηρίζονται από την Standard Query Language. Αυτή η εισαγωγή θα σας δώσει ένα καλό σημείο εκκίνησης, αλλά σας συνιστώ να ανατρέξετε στην τεκμηρίωση DBMS για να μάθετε τα ενισχυμένα μέτρα ασφαλείας που υποστηρίζει το σύστημά σας. Θα διαπιστώσετε ότι πολλές βάσεις δεδομένων υποστηρίζουν πιο προηγμένους μηχανισμούς ελέγχου πρόσβασης, όπως τη χορήγηση αδειών σε συγκεκριμένες στήλες.