CREATE SYMMETRIC KEY (Transact-SQL)

Permet de générer une clé symétrique et de spécifier ses propriétés.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER Provider_Name ]
    WITH <key_options> [ , ... n ]
        |
    ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    |
    ALGORITHM = <algorithm>
    |
    IDENTITY_VALUE = 'identity_phrase'
    |
        PROVIDER_KEY_NAME = 'key_name_in_provider' 
    |
    CREATION_DISPOSITION = {CREATE_NEW | OPEN_EXISTING }
<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256 
<encrypting_mechanism> ::=
        CERTIFICATE certificate_name 
    |
    PASSWORD = 'password' 
    |
    SYMMETRIC KEY symmetric_key_name 
    |
    ASYMMETRIC KEY asym_key_name

Arguments

  • Key_name
    Spécifie le nom unique sous lequel la clé symétrique est connue dans la base de données. Les noms des clés temporaires doivent commencer par un dièse (#). Par exemple, #temporaryKey900007. Vous ne pouvez pas créer une clé symétrique dont le nom commence par plusieurs #. Vous ne pouvez pas créer de clé symétrique temporaire à l'aide d'un fournisseur EKM.

  • AUTHORIZATION owner_name
    Spécifie le nom de l'utilisateur de base de données ou du rôle d'application auquel appartiendra la clé.

  • FROM PROVIDER Provider_Name
    Spécifie un fournisseur EKM (Extensible Key Management) et un nom. La clé n'est pas exportée à partir du périphérique EKM. Le fournisseur doit d'abord être défini à l'aide de l'instruction CREATE PROVIDER. Pour plus d'informations sur la création de fournisseurs de clés externes, consultez Fonctionnement de la gestion de clés extensible (EKM).

  • KEY_SOURCE ='pass_phrase'
    Spécifie une expression relative au mot de passe à partir de laquelle la clé doit être dérivée.

  • IDENTITY_VALUE ='identity_phrase'
    Spécifie une expression relative à l'identité à partir de laquelle un GUID doit être généré pour baliser les données qui sont chiffrées à l'aide d'une clé temporaire.

  • key_name_in_provider
    Spécifie le nom référencé dans le fournisseur EKM (Extensible Key Management).

  • CREATION_DISPOSITION = CREATE_NEW
    Crée une clé sur le périphérique EKM (Extensible Key Management). S'il existe déjà une clé sur le périphérique, l'instruction échoue et génère une erreur.

  • CREATION_DISPOSITION = OPEN_EXISTING
    Mappe une clé symétrique SQL Server à une clé EKM (Extensible Key Management) existante. Si CREATION_DISPOSITION = OPEN_EXISTING n'est pas spécifié, la valeur par défaut est CREATE_NEW.

  • certificate_name
    Spécifie le nom du certificat qui sera utilisé pour chiffrer la clé symétrique. Le certificat doit déjà exister dans la base de données.

  • 'password'
    Spécifie un mot de passe à partir duquel dériver une clé TRIPLE_DES avec laquelle sécuriser la clé symétrique. password doit satisfaire aux critères de la stratégie de mot de passe Windows de l'ordinateur qui exécute l'instance de SQL Server. Vous devez toujours utiliser des mots de passe forts.

  • symmetric_key_name
    Spécifie une clé symétrique à utiliser pour chiffrer la clé en cours de création. La clé spécifiée doit déjà exister dans la base de données et elle doit être ouverte.

  • asym_key_name
    Spécifie une clé asymétrique à utiliser pour chiffrer la clé en cours de création. Cette clé asymétrique doit déjà exister dans la base de données.

Notes

Lorsqu'une clé symétrique est créée, elle doit être chiffrée à l'aide de l'un des éléments suivants au moins : certificat, mot de passe, clé symétrique, clé asymétrique ou PROVIDER. La clé peut être soumise à plusieurs chiffrements de chaque type. En d'autres termes, une clé symétrique unique peut être chiffrée à l'aide de plusieurs certificats, mots de passe, clés symétriques et clés asymétriques à la fois.

AttentionAttention

Lorsqu'une clé symétrique est chiffrée à l'aide d'un mot de passe à la place de la clé publique de la clé principale de base de données, l'algorithme de chiffrement TRIPLE_DES est utilisé. Pour cette raison, les clés créées à l'aide d'un algorithme de chiffrement fort, tel qu'AES, sont elles-mêmes sécurisées par un algorithme plus faible.

Un mot de passe facultatif peut être utilisé pour chiffrer la clé symétrique avant de la distribuer à plusieurs utilisateurs.

Les clés temporaires appartiennent à l'utilisateur qui les crée. Les clés temporaires sont valides uniquement pour la session en cours.

IDENTITY_VALUE génère un GUID qui permet de baliser les données chiffrées à l'aide de la nouvelle clé symétrique. Ce balisage peut être utilisé pour faire correspondre les clés aux données chiffrées. Le GUID généré par une expression spécifique sera toujours le même. Lorsqu'une expression est utilisée pour générer un GUID, elle ne peut être réutilisée que si au moins une session l'utilise activement. IDENTITY_VALUE est une clause facultative ; toutefois, nous vous conseillons de l'utiliser pour stocker des données chiffrées à l'aide d'une clé temporaire.

Il n'y a pas d'algorithme de chiffrement par défaut.

Important

Nous vous déconseillons d'utiliser les chiffrements de flux RC4 et RC4_128 pour protéger les données sensibles. SQL Server n'ajoute pas de code supplémentaire au chiffrement effectué à l'aide de ces clés.

Des informations sur les clés symétriques sont consultables dans l'affichage catalogue sys.symmetric_keys.

Les clés symétriques ne peuvent pas être chiffrées par les clés symétriques créées à partir du fournisseur de chiffrement.

Éclaircissement concernant les algorithmes DES :

  • DESX a été nommé incorrectement. Les clés symétriques créées avec ALGORITHM = DESX utilisent en fait le chiffrement TRIPLE DES avec une clé de 192 bits. L'algorithme DESX n'est pas fourni. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

  • Les clés symétriques créées avec ALGORITHM = TRIPLE_DES_3KEY utilisent TRIPLE DES avec une clé de 192 bits.

  • Les clés symétriques créées avec ALGORITHM = TRIPLE_DES utilisent TRIPLE DES avec une clé de 128 bits.

Désapprobation de l'algorithme RC4 :

L'utilisation répétée du même RC4 ou RC4_128 KEY_GUID sur différents blocs de données entraîne la même clé RC4 car SQL Server ne fournit pas automatiquement de salt. L'utilisation répétée de la même clé RC4 est une erreur connue qui entraîne un chiffrement très faible. Par conséquent, les mots clés RC4 et RC4_128 sont désapprouvés. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité.

Autorisations

Requiert l'autorisation ALTER ANY SYMMETRIC KEY sur la base de données. Si la clause AUTHORIZATION est spécifiée, l'autorisation IMPERSONATE sur l'utilisateur de base de données ou l'autorisation ALTER sur le rôle d'application est requise. Si le chiffrement s'effectue par certificat ou clé asymétrique, l'autorisation VIEW DEFINITION est requise sur le certificat ou la clé asymétrique. Les connexions Windows, les connexions SQL Server et les rôles d'application sont les seuls à pouvoir posséder des clés symétriques. Les groupes et les rôles ne peuvent pas posséder de clés symétriques.

Exemples

A. Création d'une clé symétrique

Dans l'exemple ci-dessous, une clé symétrique nommée JanainaKey09 est créée à l'aide de l'algorithme AES 256, puis la nouvelle clé est chiffrée au moyen du certificat Shipping04.

CREATE SYMMETRIC KEY JanainaKey09 WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Création d'une clé symétrique temporaire

Dans l'exemple ci-dessous, une clé symétrique temporaire nommée #MarketingXXV est créée à partir de l'expression relative au mot de passe : The square of the hypotenuse is equal to the sum of the squares of the sides. La clé obtient un GUID généré à partir de la chaîne Pythagoras et est chiffrée à l'aide du certificat Marketing25.

CREATE SYMMETRIC KEY #MarketingXXV 
     WITH ALGORITHM = AES_128,
     KEY_SOURCE 
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
     IDENTITY_VALUE = 'Pythagoras'
     ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. Création d'une clé symétrique à l'aide d'un périphérique EKM (Extensible Key Management)

L'exemple suivant crée une clé symétrique appelée MySymKey à l'aide d'un fournisseur appelé MyEKMProvider et du nom de clé KeyForSensitiveData. Il assigne l'autorisation à User1 et suppose que l'administrateur système a déjà inscrit le fournisseur appelé MyEKMProvider dans SQL Server.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO