SQL Server 2019 : nouveauté TDE

Si TDE n’a pas beaucoup évolué depuis 2008, la version SQL 2019 en revanche propose une évolution intéressante : la possibilité de mettre en pause le processus de chiffrement.
Cela permet notamment de libérer les performances pour l’activité nominale de la base (impact business) puis reprendre le processus de chiffrement lorsque la base sera moins sollicitée.
Très utile pour les bases volumineuses ! Je vous propose dans cet article de découvrir cette nouveauté (je ne reviens pas sur la fonctionnalité TDE en elle même).

 

Rappel

SQL Server permet le chiffrement des données stockées (« at rest ») via la fonctionnalité Transparent Data Encryption (TDE).
TDE permet de se prémunir contre le vol des fichiers de bases de données (mdf, ndf et ldf) et des fichiers de Backup.
Lorsque TDE est activé, ces fichiers deviennent inexploitables sans clé de déchiffrement : impossible donc de remonter les bases à partir de ces fichiers sur une instance tierce, sans préalablement avoir chargé les clés de déchiffrement. Le vol des fichiers de données et de backup devient inutile.

Lorsque l’on active TDE sur une base de données, le chiffrement est effectué en arrière plan, par des threads dédiés qui vont lire toutes les pages de données en mémoire avant de les réécrire chiffrées sur disque. Cette opération peut prendre un certain temps suivant la volumétrie de la base et, vous vous en doutez, aura un impact sur les performances et sur les IO en particulier.

 

Démonstration

Soit une base de données Test_OMA.

Nous allons créer la DMK puis le certificat qui servira à chiffrer la DEK :

USE master; 
GO 
--création de la DMK
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'M0nM0td3P#ss3F0rt'; 
GO
--Création du certificat
CREATE CERTIFICATE Cert_TestTDE_OMA WITH SUBJECT = 'Certficat test TDE'; 
GO
--Création de la DEK
CREATE DATABASE ENCRYPTION KEY 
WITH ALGORITHM = AES_256 
ENCRYPTION BY SERVER CERTIFICATE Cert_TestTDE_OMA; 
GO

On peut alors démarrer le chiffrement de la base :

--Activation du chiffrement TDE de la base
ALTER DATABASE Test_OMA SET ENCRYPTION ON;

La DMV sys.dm_database_encryption_keys permet de suivre l’état d’avancement du chiffrement (colonne percent_complete) et depuis la version SQL 2019, la colonne encryption_scan_state_desc permet de connaitre le statut du processus du chiffrement (RUNNING, SUSPENDED ou ABORTED) :

Dans notre l’exemple ci-dessus, on constate que le chiffrement de la base Test_OMA est en cours…

Mettons le process de chiffrement en pause, et voyons ce qu’il se passe :

ALTER DATABASE Test_OMA SET ENCRYPTION SUSPEND;

Un coup d’œil sur les performances montre que l’activité IO a bien cessé :

Relançons le chiffrement et observons la suite :

ALTER DATABASE Test_OMA SET ENCRYPTION RESUME;

Le chiffrement reprend bien là où il en était, jusqu’à son terme :

On constate en parallèle que l’activité IO repart, le temps du chiffrement :

Conclusion

Voilà une fonction intéressante et qui permet de contrôler le processus de chiffrement sur les bases de production à gros volume. On garde le contrôle du process, que l’on peux jouer sans crainte en heures ouvrées, et suspendre à volonté lors des pics d’utilisation de la base de données. Et il est intéressant de noter que cela fonctionne également sur Azure SQL Database.

Bon SQL 🙂

O.