Auditing Enhancements in SQL Server 2012


Επειδή μερικά πράγματα πρέπει να τα κλείνεις γρήγορα έτσι σήμερα με αυτό το post θα καλύψω μια από τις υποσχέσεις που έδωσα στο τελευταίο μου post και θα μιλήσω σε αυτό για τις βελτιώσεις που έχουμε για auditing στο SQL Server 2012.

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

Available to ALL SQL Server 2012 Editions

Θα ξεκινήσω με την αναφορά ότι πλέον μπορώ ΣΕ ΟΛΕΣ ΤΙΣ ΕΚΔΟΣΕΙΣ του SQL Server 2012 να έχω auditing σε επίπεδο server. Μπορεί αυτό να ακούγεται παράξενο σε ανθρώπους που δεν έχουν ασχοληθεί ξανά με τον SQL Server ή να μην έχουν ασχοληθεί πολύ μαζί του, αλλά ναι δεν μπορούσα να κάνω κάτι τέτοιο παρά μόνο στις μεγάλες εκδόσεις (enterprise και πάνω). Αρκετά σημαντική εξέλιξη καθώς όλοι κάποια στιγμή χρειαζόμαστε κάτι τέτοιο. Πλέον υπάρχει ένας ενιαίος, συμπαγής και κυρίως ιδίων δυνατοτήτων τρόπος για να υλοποιηθεί auditing σε όλες τις εκδόσεις με αποτέλεσμα να διευκολύνεται η δουλειά ενός DBA ή Consultant.

Παρόλα αυτά αν χρειαστείς να κάνεις κάτι αντίστοιχο σε επίπεδο database αυτό μπορεί να γίνει μόνο στην Enterprise έκδοση του SQL Server 2012 (επίσης γίνεται και στις Developer και Εvaluation εκδόσεις που στην ουσία είναι η Enterprise).

Τι μπορεί κανείς να κάνει audit σε επίπεδο server ή database μπορεί να το δει εδώ.

Audit Log Failure Features (FAIL_OPERATION)

Μια από τις βελτιώσεις που δεν μπορεί να περάσει απαρατήρητη είναι ότι πλέον έχω την δυνατότητα να ορίζω καλύτερα τι ακριβώς θέλω να γίνεται στις περιπτώσεις που δεν μπορεί να γραφτούν τα audit data. Οι μέχρι τώρα δυνατότητες που είχα ήταν είτε να αγνοήσω το γεγονός με αποτέλεσμα να έχω απώλειες σε audit data, είτε να σταματάει η λειτουργία του SQL Server instance, με ότι αυτό μπορεί να συνεπάγεται και στις δύο περιπτώσεις.

Όπως φαίνεται από την παρακάτω εικόνα του παραθύρου με το οποίο ορίζω το audit location και τα properties αυτού έχω τρεις επιλογές πλέον Continue, Shut down server, Fail operation.

Θα μπορούσα να πω ότι οι πρώτες δύο είναι ότι ακριβώς είχα μέχρι τώρα, η τελευταία όμως (fail operation) παρουσιάζει ένα ενδιαφέρον καθώς μας δίνει την δυνατότητα να έχω rollback σε actions που είναι audited. Απλοποιώντας το, εάν έχω μια διαδικασία πχ να γράψω σε ένα πίνακα, η οποία όταν γίνεται πρέπει να γραφτούν και audit data αλλά για κάποιο λόγο αυτά δεν μπορούν να γραφτούν στα logs τότε η διαδικασία αποτυγχάνει ως ένα transaction.

Αυτό μας δίνει την δυνατότητα να έχουμε τον απόλυτο έλεγχο στο τι μπορεί να γίνει στον server/database μας, καθώς διαδικασίες που δεν έχω επιλέξει να κρατάνε audit data θα συνεχίσουν να δουλεύουν ενώ εργασίες για τις οποίες πρέπει να κρατηθούν αν αυτό δεν γίνει με επιτυχία τότε και αυτές δεν θα εφαρμόζονται.

Maximum Files (MAX_FILES options)

Νέα επιλογή που μας επιτρέπει να ορίζουμε τον αριθμό των audit files που θα δημιουργούν. Αν αυτός ο αριθμός ξεπεραστεί τότε θα έχω fail σε όλα τα επόμενα audit events. Δεν θα πρέπει να το μπλέξουμε με το ΜΑΧ_ROLLOVER_FILES που υπήρχε και υπάρχει και με το οποίο ορίζουμε τον αριθμό των audit files, αλλά με το που αυτό πάει να ξεπεραστεί ή γίνεται restart είτε ο SQL Server είτε το audit κάνει rollover το πρώτο file της σειράς.

clip_image001

User defined audit group support

Από αυτή την έκδοση υπάρχει πλέον η δυνατότητα να έχω δικά μου audit groups. Αρκετά χρήσιμο feature καθώς μου δίνονται δυνατότητες να καταγράψω πρόσθετες πληροφορίες όπως από πια εφαρμογή γίνεται η ενέργεια, ιδιαίτερα χρήσιμο στοιχείο όταν έχω εφαρμογές όπου όλοι οι χρήστες κτυπάνε την βάση με ένα χρήστη αλλά έχουν κάνει login σε αυτή με application account.

Για την ικανοποίηση του συγκεκριμένου feature δημιουργήθηκε μια νέα stored procedure η sp_audit_write με την οποία μπορώ να γράψω τις πρόσθετες αυτές πληροφορίες. Συμπληρωματικά σε αυτό το feature για να μπορούμε να έχουμε την δυνατότητα να βλέπουμε τις πληροφορίες αυτές προστέθηκαν πεδία στους sys.server_files_audits, sys.server_audits και στην sys.fn_get_audit_file.

Auditing support on contained databases

Υποστηρίζεται το auditing σε βάσεις που είναι χαρακτηρισμένες/ορισμένες σαν contained.

Filtering audit events

Έχω πλέον την δυνατότητα να μπορώ να ελέγξω μέσω φίλτρων ποιά events θα γράφονται στα logs. Αυτό μπορεί να γίνει με την χρήση του WHERE clause που υπάρχει στην CREATE/ALTER SERVER AUDIT.

Auditing Implementations

Οδηγίες για το πως μπορώ να υλοποιήσω Server Audit Specification μπορούμε να δούμε εδώ ενώ για Database Audit Specification εδώ.

Viewing SQL Server Audit Logs

Για το πώς μπορώ να δω τα logs οδηγίες υπάρχουν εδώ.

Επίλογος

Γενικότερα η διαδικασία του auditing στον SQL Server 2012 έχει βελτιωθεί αρκετά. Σίγουρα θα πρέπει να γίνουν και άλλα βήματα και είμαι σίγουρος ότι θα γίνουν. Σε σχέση με το παρελθόν και την χρήση που αρκετοί έκαναν με SQL trace ή SQL Profiler είναι η μέρα με την νύχτα. Εξάλλου μην ξεχνάμε ότι αυτά έχουν μπει σε φάση απόσυρσης.

/*antonch*/