Τι είναι το TDE και τι σχέση έχει με το GDPR (παράδειγμα σε SQL Server)

Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)
Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)

Από το 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
Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)
01

Έπειτα φτιάχνουμε το certificate μας με ένα όνομα:

CREATE CERTIFICATE tdeCert WITH SUBJECT = 'TDE Certificate', EXPIRY_DATE='20990909';
Commands completed successfully.

Βλέπουμε στο dmv των certificates έχει φτιαχτεί με το όνομα που του δώσαμε:

select * from sys.certificates
Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)
02

Σημαντική διαδικασία πριν προχωρήσουμε είναι να πάρουμε 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
Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)
03
/* 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'))
Τι είναι το TDE και τι σχέση έχει με το  GDPR (παράδειγμα σε SQL Server)
04

Διαγράφουμε το 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

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση