La sécurité est l'une des exigences les plus importantes pour un système piloté par les données. Le cryptage est l'un des moyens de sécuriser les données. Wikipédia définit le cryptage comme :
"Cryptage est le processus d'encodage d'un message ou d'informations de manière à ce que seules les parties autorisées puissent y accéder et que les personnes non autorisées ne le puissent pas. ”
Dans SQL Server 2016, Microsoft a introduit une fonctionnalité de chiffrement appelée Always Encrypted . Dans cet article, nous verrons ce que Always Encrypted est, et comment il peut être utilisé pour chiffrer et déchiffrer des données, à l'aide d'exemples simples.
Qu'est-ce que SQL Server Always Encrypted ?
Toujours chiffré est une fonctionnalité de sécurité qui permet à l'application cliente de gérer les clés de chiffrement et de déchiffrement, garantissant ainsi que seule l'application cliente peut déchiffrer et utiliser des données sensibles.
Plusieurs techniques de chiffrement existent, mais elles ne sont pas aussi sécurisées que Always Encrypted . Par exemple, le chiffrement à clé symétrique est utilisé pour chiffrer les données côté base de données. Un inconvénient de cette approche est que si un autre administrateur de base de données possède la clé de déchiffrement, il peut accéder aux données.
D'autre part, en cas de Always Encrypted , les données sont chiffrées côté client et le serveur de base de données reçoit une version chiffrée des données. Par conséquent, les données ne peuvent pas être déchiffrées à la fin de la base de données. Seul le client qui a chiffré les données peut les déchiffrer.
Types de clés
La fonctionnalité SQL Server Always Encrypted utilise deux types de clés :
Clé de chiffrement de colonne (CEK)
Il est toujours placé sur le serveur de base de données. Les données sont en fait cryptées à l'aide de la colonne CEK. Cependant, si quelqu'un du côté de la base de données a accès à CEK, il peut déchiffrer les données.
Clé principale de colonne (CMK)
Cette clé est placée côté client ou sur tout stockage tiers. CMK est utilisé pour protéger la CEK, en ajoutant une couche de sécurité supplémentaire. Quiconque a accès à CMK peut en fait déchiffrer la CEK qui peut ensuite être utilisée pour déchiffrer les données réelles.
Types de chiffrement
Déterministe
Ce type de cryptage générera toujours un texte crypté similaire pour le même type de données. Si vous souhaitez implémenter la recherche et le regroupement sur une colonne de table, utilisez le chiffrement déterministe pour cette colonne.
Aléatoire
Le cryptage aléatoire générera un texte crypté différent pour le même type de données, chaque fois que vous essayez de crypter les données. Utilisez un cryptage aléatoire si la colonne n'est pas utilisée pour le regroupement et la recherche.
Configuration Toujours chiffré Utiliser SSMS
Nous pouvons configurer SQL Server Always Encrypted via SSMS. Mais avant cela, nous devons créer une base de données et ajouter une table à la base de données. Exécutez le script suivant pour ce faire :
CREATE DATABASE School Use School CREATE TABLE Student ( StudentId int identity(1,1) primary key, Name varchar(100), Password varchar(100) COLLATE Latin1_General_BIN2 not null, SSN varchar(20) COLLATE Latin1_General_BIN2 not null )
Dans le script ci-dessus, nous créons une nouvelle base de données nommée School . La base de données comporte quatre colonnes :StudentId , Nom , Mot de passe , et SSN . Vous pouvez voir que les colonnes Mot de passe et SSN ont un COLLATE. Il est nécessaire de spécifier le COLLATE pour la colonne que vous voulez Always Encrypted . Le type de cryptage est spécifié comme "Latin1_General_BIN2".
Essayons d'abord d'ajouter deux enregistrements dans la table Student.
insert into Student ( Name, Password, SSN) VALUES ('John','abc123', '451236521478'), ('Mike','xyz123', '789541239654')
À ce stade, nous n'avons pas configuré Always Encrypted sur l'une des colonnes de la table Student, par conséquent, si vous essayez de sélectionner les enregistrements de la table Student, vous verrez les valeurs de données réelles plutôt que les valeurs cryptées. Exécutez la requête suivante pour sélectionner des enregistrements :
SELECT * FROM Student
La sortie ressemble à ceci :
Configurons maintenant SSMS pour activer Toujours chiffré . Comme nous l'avons dit plus tôt, Toujours chiffré crée des clés de chiffrement de colonne et des clés principales de colonne.
Pour voir les clés de chiffrement de colonne existantes et les clés principales de colonne, pour la base de données de l'école, accédez à Bases de données -> École -> Sécurité -> Clés toujours chiffrées, comme indiqué dans la figure suivante :
Étant donné que vous n'avez aucun enregistrement chiffré dans l'ensemble de données, vous ne verrez aucun CEK ou CMK dans la liste.
Activons maintenant le chiffrement sur les colonnes Mot de passe et SSN de la table Étudiant. Pour ce faire, faites un clic droit sur Bases de données -> École. Dans le menu déroulant, sélectionnez Chiffrer les colonnes option comme indiqué dans la figure ci-dessous :
Cliquez sur Suivant bouton sur l'Introduction la fenêtre. À partir de la Sélection de colonne fenêtre, vérifiez les colonnes Mot de passe et SSN. Pour la colonne Mot de passe, sélectionnez le type de cryptage comme Randomized . Pour la colonne SSN, choisissez Déterministe . Ceci est illustré dans la capture d'écran suivante :
Cliquez sur Suivant bouton sur la Configuration de la clé principale la fenêtre. Par défaut, la clé principale est stockée sur la machine cliente comme indiqué ci-dessous :
Cliquez sur Suivant bouton sur les Paramètres d'exécution et le Résumé les fenêtres. Si tout se passe bien, vous devriez voir les Résultats suivants fenêtre.
Maintenant, si vous allez à nouveau dans Bases de données -> École -> Sécurité -> Clés toujours chiffrées, vous devriez voir les CEK et CMK nouvellement créés, comme indiqué dans la figure suivante :
Essayez maintenant de sélectionner des enregistrements dans la table Student.
SELECT * FROM Student
La sortie ressemble à ceci.
À partir de la sortie, vous pouvez voir que les colonnes Mot de passe et SSN ont été chiffrées.
Récupération des données décryptées
La requête SELECT a renvoyé des données chiffrées. Et si vous souhaitez récupérer des données sous forme décryptée ? Pour ce faire, créez une nouvelle fenêtre de requête dans SSMS, puis cliquez sur Modifier la connexion icône en haut de l'Explorateur d'objets, comme illustré dans la figure suivante :
La fenêtre de connexion SQL Server apparaîtra. Sélectionnez Options bouton en bas à droite comme indiqué ci-dessous :
Depuis la fenêtre qui apparaît, cliquez sur Paramètres de connexion supplémentaires en haut à gauche et entrez "Column Encryption Setting =Enabled" dans la zone de texte, comme indiqué dans la capture d'écran suivante. Enfin, cliquez sur Se connecter bouton.
Exécutez à nouveau la requête SELECT suivante :
SELECT * FROM Student
Dans les résultats, vous verrez les enregistrements renvoyés sous forme décryptée comme indiqué ci-dessous :
Conclusion
Toujours E chiffré est l'une des dernières fonctionnalités de sécurité de SQL Server. Dans cet article, nous avons brièvement passé en revue ce que Toujours E chiffré est et comment l'activer à l'aide de SQL Server Management Studio. Nous avons également vu un exemple de base de chiffrement et de déchiffrement de données à l'aide de Toujours E chiffré fonctionnalité.