Aller au contenu principal

Chiffrement de base de données

S'applique à :
SQL Server 2016+TDE activéRôle Sysadmin requis

Vue d'ensemble​

Le chiffrement transparent des données (TDE) chiffre le stockage d'une base de données entière à l'aide d'une clé de chiffrement de base de données (DEK). Avec DuoKey EKM, cette DEK est protégée par une clé asymétrique stockée dans la plateforme cloud de DuoKey, offrant une couche de sécurité supplémentaire.

Prérequis

  • SQL Server configuré avec le fournisseur DuoKey EKM
  • Clé asymétrique créée et chiffrement activé dans DuoKey
  • SQL Server Management Studio (SSMS) installé
  • Privilèges Sysadmin sur SQL Server

Hiérarchie de chiffrement​

Plateforme cloud DuoKey

Clé de chiffrement maître (MEK)

Protégée par MPC
Protège

SQL Server (base de données master)

Clé asymétrique (EKM)

RSA-2048
Protège

Base de données utilisateur

Clé de chiffrement de base de données (DEK)

AES-256
Chiffre

Fichiers de données

.mdf, .ndf, .ldf

Chiffrés au repos

Créer une base de données et activer TDE​

1

Créer ou sélectionner une base de données

Créez une nouvelle base de données ou utilisez-en une existante :

Créer une base de donnéesSQL
-- Create a new database
CREATE DATABASE EmployeeDB;
GO

USE EmployeeDB;
CREATE TABLE Employees (
  EmployeeID INT PRIMARY KEY,
  FirstName VARCHAR(128),
  LastName VARCHAR(128),
  Salary DECIMAL(10, 2),
  SSN VARCHAR(11)
);
GO
2

Créer la clé de chiffrement de base de données

Créez une DEK protégée par la clé asymétrique dans DuoKey :

Créer la DEKSQL
USE EmployeeDB;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
GO
AlgorithmeTaille de cléRecommandation
AES_128128 bitsBonne sécurité
AES_192192 bitsMeilleure sécurité
AES_256256 bitsRecommandé - le plus robuste
Triple DES168 bitsNon recommandé
Astuce

Utilisez AES_256 pour le chiffrement le plus robuste. Il offre une excellente sécurité avec un impact minimal sur les performances du matériel moderne.

3

Activer le chiffrement

Activez TDE sur la base de données :

Activer TDESQL
ALTER DATABASE EmployeeDB
SET ENCRYPTION ON;
GO
Remarque

Le chiffrement est effectué de manière asynchrone. Pour les grandes bases de données, ce processus peut prendre un certain temps.

Suivre la progression du chiffrement​

Vérifier l'état du chiffrementSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  CASE encryption_state
      WHEN 0 THEN 'No database encryption key present'
      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'
  END AS Status,
  percent_complete,
  encryptor_type
FROM sys.dm_database_encryption_keys;
GO

Référence des états de chiffrement​

ÉtatValeurDescriptionAction requise
0Aucune DEKAucune clé de chiffrement de base de données présenteCréer une DEK avec CREATE DATABASE ENCRYPTION KEY
1Non chiffréeLa DEK existe mais le chiffrement n'est pas activéActiver avec ALTER DATABASE SET ENCRYPTION ON
2Chiffrement en coursChiffrement en coursAttendre la fin, surveiller percent_complete
3ChiffréeBase de données entièrement chiffréeAucune — fonctionnement normal
4Changement de cléRotation de clé en coursAttendre la fin
5DéchiffrementDéchiffrement en coursAttendre la fin
6Changement de protectionChangement de protecteur en coursAttendre la fin

Vérifier le chiffrement​

Vérifier le chiffrement de la base de donnéesSQL
SELECT
  d.name AS DatabaseName,
  d.is_encrypted,
  dek.encryption_state,
  dek.percent_complete,
  dek.key_algorithm,
  dek.key_length
FROM sys.databases d
LEFT JOIN sys.dm_database_encryption_keys dek
  ON d.database_id = dek.database_id
WHERE d.name = 'EmployeeDB';
GO
Vérifier l'utilisation de la clé asymétriqueSQL
USE master;
SELECT
  ak.name AS AsymmetricKeyName,
  ak.algorithm_desc,
  ak.key_length,
  cp.name AS CryptoProviderName
FROM sys.asymmetric_keys ak
INNER JOIN sys.cryptographic_providers cp
  ON ak.provider_id = cp.provider_id;
GO

Tester les opérations sur les données​

Une fois le chiffrement activé, testez que les opérations sur les données fonctionnent de manière transparente :

Tester une base de données chiffréeSQL
USE EmployeeDB;

-- Insert test data
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, SSN)
VALUES
  (1, 'John', 'Doe', 75000.00, '123-45-6789'),
  (2, 'Jane', 'Smith', 82000.00, '987-65-4321'),
  (3, 'Bob', 'Johnson', 68000.00, '555-12-3456');
GO

-- Query data (works transparently)
SELECT * FROM Employees;
GO
Astuce

Les données sont automatiquement chiffrées au repos tout en restant transparentes pour les applications.

Considérations de performance​

Chiffrement initial

  • Processeur : augmentation modérée
  • E/S : activité significative
  • Vitesse : ~1-5 Go/minute
  • La base de données reste en ligne

Impact continu

  • Opérations de lecture : 3-5 % de surcharge
  • Opérations d'écriture : 5-10 % de surcharge
  • Utilisation du processeur : augmentation de 1-3 %
  • AES-NI réduit l'impact
Conseils de performance
  • Planifiez le chiffrement initial pendant les fenêtres de maintenance
  • Surveillez le processeur et les E/S pendant le chiffrement
  • Utilisez des processeurs compatibles AES-NI pour de meilleures performances
  • Assurez un espace tempdb adéquat

Chiffrer plusieurs bases de données​

Utilisez un script pour chiffrer plusieurs bases de données à la fois :

Script de chiffrement par lotSQL
DECLARE @dbname NVARCHAR(128);
DECLARE @sql NVARCHAR(MAX);

DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
AND is_encrypted = 0;

OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbname;

WHILE @@FETCH_STATUS = 0
BEGIN
  SET @sql = N'USE [' + @dbname + '];
               CREATE DATABASE ENCRYPTION KEY
               WITH ALGORITHM = AES_256
               ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
               ALTER DATABASE [' + @dbname + '] SET ENCRYPTION ON;';

  EXEC sp_executesql @sql;
  PRINT 'Encrypted database: ' + @dbname;

  FETCH NEXT FROM db_cursor INTO @dbname;
END;

CLOSE db_cursor;
DEALLOCATE db_cursor;
GO

Désactiver le chiffrement​

Avertissement

La désactivation du chiffrement déchiffrera la base de données, ce qui peut prendre un temps considérable pour les grandes bases de données.

Désactiver TDESQL
-- Disable encryption
ALTER DATABASE EmployeeDB
SET ENCRYPTION OFF;
GO

-- Monitor decryption progress
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO

-- After decryption completes (encryption_state = 1)
USE EmployeeDB;
DROP DATABASE ENCRYPTION KEY;
GO

Bonnes pratiques​

Sécurité

Chiffrez les bases de données tôt, protégez les clés de sauvegarde, auditez l'accès aux clés

Exploitation

Testez avant la production, surveillez les performances, planifiez la croissance

Maintenance

Sauvegardes régulières, tests de restauration, gardez DuoKey accessible

Résolution des problèmes​

Étapes suivantes​