Introduction
Disponible depuis SQL Server 2008 Enterprise TDE permet de chiffrer un base de données de manière totalement transparente pour les application qui s’en appuient. A l’aide de TDM, les fichier .mdf et .ldf ainsi que les sauvegardes sont chiffrées avec les standards AES ou 3DES.
Le chiffrement est réalisé au niveau de la page. La donnée est chiffrée lors de son écriture sur le disque et déchiffrée lors de sa lecture, chiffrer et déchiffrer l’information au niveau de la page permet aux applications clientes de ne pas nécessiter de prérequis.
Dans le cas où la base de donnée est utilisée dans un mode de réplication (AlwaysOn, Mirroring ou Log Shipping), toutes les bases participant à la réplication seront chiffrées.
Attention, TDM chiffre la donnée au niveau de son support physique ce qui permet de la protéger en d’accès au disque contenant la base de donnée, les communications (client/server) ne sont elles pas chiffrées, une connexion SSL client/server doit être utilisée dans ce cas.
Prérequis et commandes utilisées
Réalisation
1.Créer la “Master Key” de la base de donnée
USE Master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD='Password'; GO |
Afin d’activer TDE, il est nécessaire de créer une master key. La master key doit être créée depuis la base master.
Microsoft recommande de la clé principale à l'aide de l'instruction BACKUP MASTER KEY et stocker la sauvegarde en lieu sûr.
2. Créer un certificat pour proteger “Master Key” créé précédemment
CREATE CERTIFICATE MyCert WITH SUBJECT='MyDatabase DEK'; GO |
Créer un certificat appelé “MyDatabase” dans l’exemple plus haut.
3. Créer la “Database Encryption Key”
USE MyDatabase GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE MyCert; GO |
Se positionner sur la base à chiffrer.
Créer la clé utilisée pour protéger la base de donnée, cette clé est appelée DEK (Database Encryption Key), cette clé est sécurisée à l’aide du certificat créé précédemment.
Les algorithmes de chiffrement suivant sont proposés :
- AES_128
- AES_192
- AES_256
- TRIPLE_DES_3KEY
4. Activer le chiffrement au niveau de la base à chiffrer
ALTER DATABASE MyDatabase SET ENCRYPTION ON; GO |
Durant le chiffrement la base est toujours accessible le processus de chiffrement étant réalisé en arrière-plan, cependant, des dégradation des performances sont à prévoir.
Vérification
La commande suivante permet de vérifier la progression du chiffrement :
SELECT db_name(database_id),encryption_state,percent_complete, key_algorithm,key_length
FROM sys.dm_database_encryption_keys |
Exploitation
En plus des tâches de sauvegarde usuelles, l’utilisation de TDM impose la sauvegarde du certificat utilisé pour le chiffrement de la base. Sans ce certificat, il est impossible d’accéder aux données chiffrée, même depuis une sauvegarde (le chiffrement s’appliquant au niveau de la page).
Le script suivant est un exemple qui présente comment sauvegarder le certificat ainsi que la clé privée (inutile de préciser l’emplacement entre parenthèses dans le switch “WITH PRIVATE KEY” si l’on souhaite exporter le certificat avec sa clé privée) utilisés pour le chiffrement :
-- Use master car la master key est stockée dans la base master USE Master GO
BACKUP CERTIFICATE MyCert TO FILE = 'C:\_cert\MyCert' WITH PRIVATE KEY (file='C:\_cert\MyCertPrivateKey', ENCRYPTION BY PASSWORD='Password') |