Οπότε πιστευεις ότι με αυτό τον τρόπο δεν θα έχω πρόβλημα.
Αν καποιος "αποκτησει προσβαση" στην βαση ενω δεν θα επρεπε, τοτε υπαρχει προβλημα το οποιο δεν λυνεται με encryption.
Σε γενικες γραμμες, το encryption ΔΕΝ αντικαθιστα τo security/access στην βαση. Το encryption "προσθετει" ενα επιπλεον layer ασφαλειας στα δεδομενα
: μονο οσοι εχουν αδεια προσβασης στα δεδομενα κ μονο οσοι εχουν την αδεια να χρησιμοποιησουν τα κλειδια για αποκρυπτογραφηση (additional layer) μπορουν να διαβασουν τα πραγματικα δεδομενα.
Ο ποιο "ασφαλης" τροπος για να κρυπτογραφησεις δεδομενα ειναι να χρησιμοποιησεις password για ενα κομματι της encryption hierarchy και αυτο το κομματι ΔΕΝ αποθηκευεται πουθενα.
πχ. στο παραδειγμα του dotnetslackers, αν αλλαξεις την default behavior του SQL, να μην αποθηκευει το database key στην master db,
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY
τοτε ο μονος τροπος για να "ανοιξεις" το database key ειναι με χρηση του password.
Admins, dbowners, other users που εχουν προσβαση στα δεδομενα αλλα ΔΕΝ γνωριζουν το password για το database key, ΔΕΝ μπορουν να τα αποκρυπτογραφησουν (επισης δεν μπορουν να παρουν backup του database key, να το τροποποιησουν κτλ)
Ωστοσο, αλλαζοντας την default behavior, θυσιαζεις την ευκολια χρησης out of the box, επειδη καθε φορα που χρειαζεται να αποκρυπτογραφηθουν δεδομενα πρεπει να "δοθει/προσδιοριστει" το password οποτε η "δυσκολια της υλοποιησης" μεταφερεται στον τροπο με τον οποιο παρεχεις το password.
θέλω να μπορώ να κάνω search σε encrypted data με το like operator
Encryption και αναζητηση ειναι αντιφατικοι/αλληλοσυγκρουομενοι οροι. Για να μπορεσεις να κανεις αναζητηση μεσα στα δεδομενα θα πρεπει να τα αποκρυπτογραφησεις πρωτα (ολα) .
Για μεγαλο ογκο δεδομενων σε περιβαλλον υψηλης χρησης, αυτο ισως να ειναι πρακτικα απαγορευτικο.
Υπαρχουν καποια trick που χρησιμοποιουν indexes σε hashed data (εφοσον χρησιμοποιειται encryption σε επιπεδο στηλης/κελιου) αλλα αυτα τα trick μπορουν να χρησιμοποιηθουν μονο για exact matches (οχι για LIKE %..%)
...να μη μπορεί μετά κανείς να μου πει γιατί δεν έβαλες encryption και γενικά ασφάλεια στην εφαρμογή
Σε καθε περιπτωση πρεπει να προσδιορισεις ποια δεδομενα (ιατρικοι φακελοι, ΑΦΜ etc) απαιτουν (βαση νομοθεσιας, απαιτηση πελατη, κοινης λογικης etc) επιπλεον προστασια και υπο/για ποιες συνθηκες (αν οι χρηστες εχουν προσβαση στα δεδομενα αλλα δεν θα πρεπει να μπορουν δουν καποια απο αυτα, αν η βαση βγει εκτος server etc).
Το να εχεις encryption για να λες οτι εχεις encryption δεν ειναι λογος για να κρυπτογραφησεις τα δεδομενα.
Τα παρακατω links παρεχουν πληροφοριες σχετικα με την κρυπτογραφηση στον SQL Server, διαφορετικους τροπους προσεγγισης υπο διαφορετικες συνθηκες και καποια trick για ταχυτερες αναζητησεις σε encrypted data (οχι ομως για ταχυτερες αναζητησεις LIKE %...% οι οποιες ειναι πρακτικα πολυ πολυ δυσκολες (εως ακατορθωτες) )
http://msdn.microsoft.com/en-us/library/cc837966(v=sql.100).aspx
http://blogs.msdn.com/b/raulga/archive/2006/03/11/549754.aspx
--ΗΤΗ--