Τι είναι το TDE και τι σχέση έχει με το GDPR (παράδειγμα σε SQL Server)
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Από το 2018 που ξεκίνησε η Ευρωπαϊκή νομοθεσία του GDPR (προστασίας δεδομένων) στην Ευρώπη όλες η εταιρίες άρχισαν να ψάχνουν λύσεις για το πως θα εφαρμοστεί η πολιτική προστασίας τον δεδομένων άμεσα με όσο μικρότερο impact γίνεται.
Εκεί έρχεται η τεχνολογία του TDE (Transparent Data Encryption) που υποστηρίζεται στα σημερινά RDBMS.
Τι είναι όμως πρακτικά το TDE
Το TDE εφαρμόζει κρυπτογράφηση στο επίπεδο των φυσικών αρχείων δηλαδή στον σκληρό δίσκο. Τα data files, log files και backups όταν ενεργοποιηθεί εφαρμόζουν την πολιτική της κρυπτογράφησης.
Που μας προστατεύει
Αν κάποιος κακόβουλος χρήστης έχει τα χέρια του τους σκληρούς δίσκους της βάσης ή τα data files ή κάποιο από τα backups δεν θα έχει δυνατότητα να υποκλέψει δεδομένα αν δεν έχει στην κατοχή του το Master Key και το backup του certificate μαζί με το private key και τον κωδικό του.
Φυσικά όμως η ενεργοποίηση του έρχεται με κάποιο performance impact…
Επίσης θα πρέπει να αναφερθεί ότι το TDE δεν προστατεύει τα δεδομένα σε επίπεδο δικτύου ούτε φαίνονται κρυπτογραφημένα σε ένα ερώτημα (query) στη βάση όπως συμβαίνει με το data masking, cell level encryption και always encrypt. Άρα δεν μπορεί να θεωρηθεί ως μία λύση για όλα…!
Πώς ενεργοποιείται το TDE σε βάση δεδομένων σε SQL Server
Πρώτα πρέπει να φτιάξουμε ένα master key encryption ορίζοντας έναν κωδικό:
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'passw0rd' GO
Commands completed successfully.
Θα δούμε ότι στο dmv φαίνεται να έχει φτιαχτεί ένα κλειδί με το όνομα MS_ServiceMasterKey:
select * from sys.symmetric_keys
Έπειτα φτιάχνουμε το certificate μας με ένα όνομα:
CREATE CERTIFICATE tdeCert WITH SUBJECT = 'TDE Certificate', EXPIRY_DATE='20990909';
Commands completed successfully.
Βλέπουμε στο dmv των certificates έχει φτιαχτεί με το όνομα που του δώσαμε:
select * from sys.certificates
Σημαντική διαδικασία πριν προχωρήσουμε είναι να πάρουμε backup το certificate ορίζοντας ένα όνομα για το αρχείο που θα δημιουργηθεί ως private key και τον κωδικό του:
*Σε σχόλιο είναι το script που τρέχουμε για την επαναφορά του.
BACKUP CERTIFICATE tdeCert TO FILE = 'C:\backup\tde.cer' WITH PRIVATE KEY ( FILE = 'c:\backup\tde.pvk' , ENCRYPTION BY PASSWORD = 'passw0rd' ); --create certificate tdeCert from file ='C:\backup\tde.cer' WITH PRIVATE KEY ( FILE = 'c:\backup\tde.pvk' , DECRYPTΙΟΝ BY PASSWORD = 'passw0rd' );
Έπειτα διαλέγουμε την βάση δεδομένων που θέλουμε να encrypt και δημιουργούμε το encryption key με τον αλγόριθμο που θα ακολουθήσει σύμφωνα με το certificate που φτιάξαμε πριν:
use translation go CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE tdeCert;
Με την παρακάτω εντολή γίνεται ενεργοποίηση του στην βάση δεδομένων:
ALTER DATABASE translation SET ENCRYPTION ON;
Commands completed successfully.
Με το παρακάτω query, βλέπουμε σε τι state είναι το encryption. Αμέσως αφώτου το ενεργοποιήσουμε θα δούμε ότι θα είναι σε status 2, που σημαίνει ότι έχει ξεκινήσει η διαδικασία του encryption και θα καταλήξει σε status 3 που είναι το Εncrypted:
SELECT [db].name, [db].is_encrypted, [k].encryption_state, [k].percent_complete, CASE [k].encryption_state WHEN 0 THEN 'Not Encrypted' WHEN 1 THEN 'Unencrypted' WHEN 2 THEN 'Encryption in progress' WHEN 3 THEN 'Encrypted' WHEN 4 THEN 'Key change in progress' WHEN 5 THEN 'Decryption in progress' WHEN 6 THEN 'Protection change in progress ' ELSE 'Not Encrypted' END AS 'Desc' FROM sys.dm_database_encryption_keys [k] RIGHT JOIN sys.databases [db] ON [k].database_id = [db].database_id
/* EncryptState
0
No database encryption key present, no encryption
1
Unencrypted
2
Encryption in progress
3
Encrypted
4
Key change in progress
5
Decryption in progress
6
The certificate or asymmetric key encrypting the DEK is being changed
*/
Πώς αφαιρούμε το TDE στον SQL Server
Πρώτα το κάνουμε απενεργοποίηση στη βάση δεδομένων:
USE MASTER GO ALTER DATABASE translation SET ENCRYPTION OFF GO
Commands completed successfully.
Τρέχουμε το query στο dmv μέχρι να δούμε ότι έχει γίνει status 1, δηλαδή ότι έχει γίνει decrypt η βάση δεδομένων:
select * from sys.dm_database_encryption_keys where 1=1 and database_id in (db_id('translation'))
Διαγράφουμε το encryption key:
USE translation GO DROP DATABASE ENCRYPTION KEY GO
Commands completed successfully.
Ελέγχουμε ότι δεν υπάρχει πια:
select * from sys.dm_database_encryption_keys where 1=1 and database_id in (db_id('translation'))
(0 rows affected)
Για να αφαιρέσουμε το certificate και το master key από ολόκληρο το instance
Διαγράφουμε και το certificate:
use master go drop certificate tdeCert;
Και τέλος διαγράφουμε το master key encryption:
drop master key
Μεγάλη προσοχή!!!
Στην περίπτωση που ενεργοποιήσουμε το TDE σε βάση δεδομένων, αν σε κάποιο disaster έχουμε χάσει το certificate με το private key του πρέπει να γνωρίζουμε ότι δεν θα υπάρξει γυρισμός…
Πώς κάνουμε restore μία βάση δεδομένων με TDE σε άλλο SQL Server Instance
Πρώτα μεταφέρουμε στο target instance, το backup του certificate(C:\backup\tde.cer), το private key (C:\backup\tde.pvk) και το backup της βάσης δεδομένων (C:\backup\translation_full.bak).
Δημιουργούμε ένα καινούργιο master key encryption(μόνο αν δεν υπάρχει ήδη):
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'passw0rd' GO
Στη συνέχεια κάνουμε restore το certificate με το αρχείο backup, το private key και τον κωδικό του:
create certificate tdeCert from file ='C:\backup\tde.cer' WITH PRIVATE KEY ( FILE = 'c:\backup\tde.pvk' , DECRYPTΙΟΝ BY PASSWORD = 'passw0rd' );
Και πλέον μπορούμε να κάνουμε restore την βάση δεδομένων:
RESTORE DATABASE [translation] FROM DISK = N'C:\backup\translation_full.bak' WITH STATS = 10; GO