Security Enhancements in SQL Server 2012


Ας κάνουμε μία αποτοξίνωση από τα BI post και ας πάμε να δούμε τι καλά έχουν έρθει στην ασφάλεια του SQL Server 2012.

Αν και ο SQL Server εδώ και πολλά χρόνια είναι ασφαλής σε σχέση με τον ανταγωνισμό εντούτοις δεν υπάρχει εφησυχασμός στο product group καθώς το θέμα ασφάλεια είναι μια ατέρμονη πάλη με τους κακούς.

Ας πάρουμε με την σειρά τα καλούδια που μας ήρθαν με τον SQL Server 2012 και αφορούν την ασφάλεια.

Νέα Permission

Δεκαεννέα (19) νέα permission εμφανίστηκαν στον SQL Server 2012. Αυτά είναι

Class

Permission

AVAILABILITY GROUP

ALTER

AVAILABILITY GROUP

CONTROL

AVAILABILITY GROUP

TAKE OWNERSHIP

AVAILABILITY GROUP

VIEW DEFINITION

SCHEMA

CREATE SEQUENCE

SEARCH PROPERTY LIST

ALTER

SEARCH PROPERTY LIST

CONTROL

SEARCH PROPERTY LIST

REFERENCES

SEARCH PROPERTY LIST

TAKE OWNERSHIP

SEARCH PROPERTY LIST

VIEW DEFINITION

SERVER

ALTER ANY AVAILABILITY GROUP

SERVER

ALTER ANY EVENT SESSION

SERVER

ALTER ANY SERVER ROLE

SERVER

CREATE AVAILABILITY GROUP

SERVER

CREATE SERVER ROLE

SERVER ROLE

ALTER

SERVER ROLE

CONTROL

SERVER ROLE

TAKE OWNERSHIP

SERVER ROLE

VIEW DEFINITION

Όπως είναι κατανοητό από την παραπάνω λίστα η εμφάνιση τους ήταν επιβεβλημένη καθώς νέα features εμφανίστηκαν στην έκδοση αυτή.

User-defined server roles

Μια απαίτηση χρόνων έλαβε σάρκα και οστά στην έκδοση αυτή, και δεν είναι άλλη από την δυνατότητα να μπορούμε να φτιάχνουμε δικούς μας server roles σε αντίθεση με το τι υπήρχε στις προηγούμενες εκδόσεις όπου υπήρχαν συγκεκριμένοι ρόλοι οι γνωστοί Fixed Server Roles.

Με αυτή την δυνατότητα μας λύνονται τα χέρια καθώς έτσι πλέον έχουμε την δυνατότητα να ραφινάρουμε με ακρίβεια το τι θέλουμε να κάνουν οι χρήστες με υψηλότερη προσβασιμότητα σε επίπεδο server. Για παράδειγμα μπορεί στον οργανισμό μας να θέλουμε να έχουμε sysadmins αλλά όλοι δεν μπορεί να είναι το ίδιο καθώς λόγο εμπειρίας κάποιοι πρέπει να έχουν χαμηλότερη πρόσβαση σε σχέση με άλλους. Έτσι πλέον μπορούμε να φτιάξουμε ένα ρόλο junior admin που να έχει τα δικαιώματα που θέλουμε.

Αυτό μπορεί να γίνει είτε μέσα από τον SSMS είτε με την χρήση της CREATE SERVER ROLE. Φυσικά και η διαχείριση των ρόλων αυτών μπορεί να γίνει πάλι είτε με τον SSMS είτε με τις ALTER SERVER ROLE και DROP SERVER ROLE.

Management Changes

Εκτός όμως από αυτό εμφανίστηκαν αλλαγές και στον τρόπο διαχείρισης όπως για παράδειγμα στην ALTER SERVER ROLE όπου έχω την δυνατότητα μέσω της WITH ADD/DROP MEMBER να προσθέσω μέλη.

Αυτό ισχύει και για την ALTER ROLE καθώς πλέον οι γνωστές sp_addrolemember και sp_droprolemember έχουν μπει σε κατάσταση απόσυρσης (deprecation).

Ακόμα αρκετές functions βελτιώθηκαν ή έκαναν την εμφάνιση τους όπως η IS_ROLEMEMBER με την οποία έχω την δυνατότητα στον κώδικα μου σε Τ-SQL να ελέγχω το εάν ένα db principle είναι μέλος σε συγκεκριμένο ρόλο ή όχι.

Default Schema σε Windows Groups

Όπως είναι γνωστό όπως βάζω ένα windows user στον SQL Server μπορώ να βάλω και ένα windows group. Μέχρι τώρα δεν μπορούσα να ορίζω default schema σε groups, τώρα όμως μπορώ.

Με αυτό τον τρόπο δεν θα αντιμετωπίζω αυτό που μέχρι τώρα είχα. Τι είχα;

Όπως είναι γνωστό κάθε users όταν τον βάζω να έχει πρόσβαση στον SQL Server ανήκει σε κάποιο schema εάν δεν το κάνω τότε θεωρείται ότι ανήκει στο default schema που δεν είναι άλλο το dbo. Εάν ο user αυτός έχει την δυνατότητα να φτιάξει ένα object π.χ. table τότε αυτό θα ανήκει στο schema που έχει ο user. Πχ dbo.Orders ή sales.Orders.

Αν όμως ο user αποκτούσε πρόσβαση στον SQL Server επειδή άνηκε σε κάποιο Windows Group και επειδή μέχρι τώρα δεν είχα την δυνατότητα να ορίσω default schema σε αυτά αλλά ούτε και στο user τότε αν είχα δώσει την δυνατότητα να δημιουργίας object ποιο θα ήταν το schema που θα άνηκε αυτό; Δυστυχώς δεν θα ήταν το dbo ή κάποιο συγκεκριμένο αλλά το όνομα του κάθε χρήστη. Εφιάλτης για τον DBA καθώς έτσι θα είχε να διαχειριστεί τόσα schemas όσα και οι users που υπάρχουν στο Windows Group.

Αυτό τώρα πλέον με την δυνατότητα να μπορώ να ορίζω το schema σε επίπεδο Windows Group εξαφανίζεται.

Contained Databases

Μέχρι τώρα όταν χρειάζονταν να μεταφερθεί μια βάση από έναν server σε έναν άλλο ή είχα υλοποιήσει database mirroring, replication γενικότερα κάποιο failover σενάριο θα έπρεπε να διασφαλίσω ότι οι χρήστες που είχαν την δυνατότητα να προσπελάσουν την συγκεκριμένη βάση στη αρχική θέση της θα μπορούν να το κάνουν και στην νέα θέση της. Αυτό για τον DBA ήταν ένας πονοκέφαλος καθώς θα έπρεπε να κρατάει in-sync τους users σε κάθε εμπλεκόμενο SQL Server. Απαραίτητο καθώς για να μπορέσει κάποιος user να φτάσει να “μιλήσει” στην βάση θα πρέπει πρώτα να γίνει authenticate από το database engine του SQL Server.

Πλέον με τις Contained Databases ο user μπορεί να έχει πρόσβαση σε αυτές χωρίς να χρειάζεται να περάσει από το database engine. Ιδανικό σενάριο για databases που θέλω να είναι AlwaysOn το νέο feature για availability που έχει ο SQL Server 2012 και όχι μόνο.

Σε επόμενο post θα ασχοληθώ αναλυτικά με αυτές αν και έχω ήδη κάνει παρουσίαση για αυτές όπως και για άλλα νέα features του SQL Server 2012 όταν ήταν ακόμα σε CTP το 2010 την οποία μπορείτε να δείτε εδώ.

Άλλες Βελτιώσεις

Πλέον των παραπάνω βελτιώσεων έγιναν και σε σημεία που δεν είναι ευδιάκριτα άμεσα όπως

  • Στη HASHBYTES που υποστηρίζει πλέον SHA 256 και 512.
  • Ο RC4 αν και ακόμα υποστηρίζεται για συμβατότητα εντούτοις θα πρέπει να αλλάξει σε ένα AES καθώς έχει περιέλθει σε κατάσταση κατάργησης (deprecation).
  • Αυξήθηκε το μέγεθος των private keys που γίνονται import από εξωτερικές πηγές από 3.456 σε 4.096 bits
  • Το Service Master Key και το Database Master Key άλλαξε από Triple DES σε AES για αυτό και σε περιπτώσεις instance migration θα πρέπει αυτά να ξαναδημιουργηθούν.
  • Στην CREATE CRERTIFICATE έχουμε τo FROM BINARY option το οποίο μας δίνει την δυνατότητα να ορίσουμε το binary description ενός ASN encoded certificate.
  • Nέες functions CERTENCODED και CERTPRIVATEKEY που μπορούν να χρησιμοποιηθούν για την εξαγωγή του binary description από ένα υπάρχον certificate.
  • Οι Builtin\Administrators και NT AUTHORITY\SYSTEM αν και δεν γίνονται αυτόματα sysadmins κατά την εγκατάσταση του SQL Server εντούτοις μπορούν να έχουν πρόσβαση όταν το service ξεκινάει με τον flag -m (single user mode)
  • Υποστηρίζονται πλήρως τα Managed Service και Virtual Accounts όταν είμαστε σε Windows Server 2008 R2 και Windows 7
  • Η υποστήριξη των per-service SID είναι πλέον σε όλα τα OS που μπορεί να εγκατασταθεί ο SQL Server 2012.
  • Σημαντικές αλλαγές έχουν γίνει στο auditing αλλά επειδή το θέμα αυτό είναι μεγάλο και θα είναι αμαρτία να το θάψω σε αυτό το post θα γράψω ξεχωριστό για αυτό.

 

Μέχρι το επόμενο post να είστε όλοι καλά στην υγεία σας.

/*antonch*/