CREATE SYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Permet de générer une clé symétrique et de spécifier ses propriétés dans SQL ServerSQL Server.Generates a symmetric key and specifies its properties in SQL ServerSQL Server.

Cette fonctionnalité est incompatible avec l'exportation de base de données à l'aide de l'infrastructure d'application de la couche Données.This feature is incompatible with database export using Data Tier Application Framework (DACFx). Vous devez supprimer toutes les clés symétriques avant l'exportation.You must drop all symmetric keys before exporting.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

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  

ArgumentsArguments

Key_nameKey_name
Spécifie le nom unique sous lequel la clé symétrique est connue dans la base de données.Specifies the unique name by which the symmetric key is known in the database. Les noms des clés temporaires doivent commencer par un dièse (#).The names of temporary keys should begin with one number (#) sign. Par exemple, #temporaryKey900007.For example, #temporaryKey900007. Vous ne pouvez pas créer une clé symétrique dont le nom commence par plusieurs #.You cannot create a symmetric key that has a name that starts with more than one #. Vous ne pouvez pas créer de clé symétrique temporaire à l'aide d'un fournisseur EKM.You cannot create a temporary symmetric key using an EKM provider.

AUTHORIZATION owner_nameAUTHORIZATION owner_name
Spécifie le nom de l'utilisateur de base de données ou du rôle d'application auquel appartiendra la clé.Specifies the name of the database user or application role that will own this key.

FROM PROVIDER provider_nameFROM PROVIDER provider_name
Spécifie un fournisseur EKM (Extensible Key Management) et un nom.Specifies an Extensible Key Management (EKM) provider and name. La clé n'est pas exportée à partir du périphérique EKM.The key is not exported from the EKM device. Le fournisseur doit d'abord être défini à l'aide de l'instruction CREATE PROVIDER.The provider must be defined first using the CREATE PROVIDER statement. Pour plus d’informations sur la création de fournisseurs de clés externes, consultez Gestion de clés extensible (EKM).For more information about creating external key providers, see Extensible Key Management (EKM).

Note

Cette option n'est pas disponible dans une base de données à relation contenant-contenu.This option is not available in a contained database.

KEY_SOURCE ='pass_phrase'KEY_SOURCE ='pass_phrase'
Spécifie une phrase secrète à partir de laquelle la clé doit être dérivée.Specifies a pass phrase from which to derive the key.

IDENTITY_VALUE ='identity_phrase'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.Specifies an identity phrase from which to generate a GUID for tagging data that is encrypted with a temporary key.

PROVIDER_KEY_NAME='key_name_in_provider'PROVIDER_KEY_NAME='key_name_in_provider'
Spécifie le nom référencé dans le fournisseur EKM (Extensible Key Management).Specifies the name referenced in the Extensible Key Management provider.

Note

Cette option n'est pas disponible dans une base de données à relation contenant-contenu.This option is not available in a contained database.

CREATION_DISPOSITION = CREATE_NEWCREATION_DISPOSITION = CREATE_NEW
Crée une clé sur le périphérique EKM (Extensible Key Management).Creates a new key on the Extensible Key Management device. S'il existe déjà une clé sur le périphérique, l'instruction échoue et génère une erreur.If a key already exists on the device, the statement fails with error.

CREATION_DISPOSITION = OPEN_EXISTINGCREATION_DISPOSITION = OPEN_EXISTING
Mappe une clé symétrique SQL ServerSQL Server à une clé EKM (Extensible Key Management) existante.Maps a SQL ServerSQL Server symmetric key to an existing Extensible Key Management key. Si CREATION_DISPOSITION = OPEN_EXISTING n'est pas spécifié, la valeur par défaut est CREATE_NEW.If CREATION_DISPOSITION = OPEN_EXISTING is not provided, this defaults to CREATE_NEW.

certificate_namecertificate_name
Spécifie le nom du certificat qui sera utilisé pour chiffrer la clé symétrique.Specifies the name of the certificate that will be used to encrypt the symmetric key. Le certificat doit déjà exister dans la base de données.The certificate must already exist in the database.

' password '' password '
Spécifie un mot de passe à partir duquel dériver une clé TRIPLE_DES avec laquelle sécuriser la clé symétrique.Specifies a password from which to derive a TRIPLE_DES key with which to secure the symmetric key. 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 ServerSQL Server.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. Utilisez toujours des mots de passe forts.Always use strong passwords.

symmetric_key_namesymmetric_key_name
Spécifie une clé symétrique utilisée pour chiffrer la clé en cours de création.Specifies a symmetric key, used to encrypt the key that is being created. La clé spécifiée doit déjà exister dans la base de données et elle doit être ouverte.The specified key must already exist in the database, and the key must be open.

asym_key_nameasym_key_name
Spécifie une clé asymétrique utilisée pour chiffrer la clé en cours de création.Specifies an asymmetric key, used to encrypt the key that is being created. Cette clé asymétrique doit déjà exister dans la base de données.This asymmetric key must already exist in the database.

<algorithm><algorithm>
Spécifiez l’algorithme de chiffrement.Specify the encrypting algorithm.

Avertissement

À partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), tous les algorithmes autres que AES_128, AES_192 et AES_256 sont déconseillés.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), all algorithms other than AES_128, AES_192, and AES_256 are deprecated. Pour utiliser des algorithmes plus anciens (ce qui n’est pas recommandé), vous devez affecter le niveau de compatibilité 120 ou un niveau inférieur à la base de données.To use older algorithms (not recommended), you must set the database to database compatibility level 120 or lower.

Notes Remarks

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.When a symmetric key is created, the symmetric key must be encrypted by using at least one of the following: certificate, password, symmetric key, asymmetric key, or PROVIDER. La clé peut être soumise à plusieurs chiffrements de chaque type.The key can have more than one encryption of each 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.In other words, a single symmetric key can be encrypted by using multiple certificates, passwords, symmetric keys, and asymmetric keys at the same time.

Attention

Quand une clé symétrique est chiffrée avec un mot de passe au lieu d’un certificat (ou une autre clé), l’algorithme de chiffrement TRIPLE DES est utilisé pour chiffrer le mot de passe.When a symmetric key is encrypted with a password instead of a certificate (or another key), the TRIPLE DES encryption algorithm is used to encrypt the password. Pour cette raison, les clés créées à l'aide d'un algorithme de chiffrement renforcé, tel qu'AES, sont elles-mêmes sécurisées par un algorithme plus faible.Because of this, keys that are created with a strong encryption algorithm, such as AES, are themselves secured by a weaker algorithm.

Un mot de passe facultatif peut être utilisé pour chiffrer la clé symétrique avant de la distribuer à plusieurs utilisateurs.The optional password can be used to encrypt the symmetric key before distributing the key to multiple users.

Les clés temporaires appartiennent à l'utilisateur qui les crée.Temporary keys are owned by the user that creates them. Les clés temporaires sont valides uniquement pour la session en cours.Temporary keys are only valid for the current session.

IDENTITY_VALUE génère un GUID qui permet de baliser les données chiffrées à l'aide de la nouvelle clé symétrique.IDENTITY_VALUE generates a GUID with which to tag data that is encrypted with the new symmetric key. Ce balisage peut être utilisé pour faire correspondre les clés aux données chiffrées.This tagging can be used to match keys to encrypted data. Le GUID généré par une expression spécifique est toujours le même.The GUID generated by a specific phrase is always the same. 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.After a phrase has been used to generate a GUID, the phrase cannot be reused as long as there is at least one session that is actively using the phrase. 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.IDENTITY_VALUE is an optional clause; however, we recommend using it when you are storing data encrypted with a temporary key.

Il n'y a pas d'algorithme de chiffrement par défaut.There is no default encryption algorithm.

Important

Nous vous déconseillons d'utiliser les chiffrements de flux RC4 et RC4_128 pour protéger les données sensibles.We do not recommend using the RC4 and RC4_128 stream ciphers to protect sensitive data. SQL ServerSQL Server n'ajoute pas d'encodage supplémentaire au chiffrement effectué à l'aide de ces clés. does not further encode the encryption performed with such keys.

Des informations sur les clés symétriques sont consultables dans la vue de catalogue sys.symmetric_keys.Information about symmetric keys is visible in the sys.symmetric_keys catalog view.

Les clés symétriques ne peuvent pas être chiffrées par les clés symétriques créées à partir du fournisseur de chiffrement.Symmetric keys cannot be encrypted by symmetric keys created from the encryption provider.

Éclaircissement concernant les algorithmes DES :Clarification regarding DES algorithms:

  • DESX a été nommé incorrectement.DESX was incorrectly named. Les clés symétriques créées avec ALGORITHM = DESX utilisent en fait le chiffrement TRIPLE DES avec une clé de 192 bits.Symmetric keys created with ALGORITHM = DESX actually use the TRIPLE DES cipher with a 192-bit key. L'algorithme DESX n'est pas fourni.The DESX algorithm is not provided. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server.This feature will be removed in a future version of 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é.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
  • Les clés symétriques créées avec ALGORITHM = TRIPLE_DES_3KEY utilisent TRIPLE DES avec une clé de 192 bits.Symmetric keys created with ALGORITHM = TRIPLE_DES_3KEY use TRIPLE DES with a 192-bit key.
  • Les clés symétriques créées avec ALGORITHM = TRIPLE_DES utilisent TRIPLE DES avec une clé de 128 bits.Symmetric keys created with ALGORITHM = TRIPLE_DES use TRIPLE DES with a 128-bit key.

    Dépréciation de l’algorithme RC4 :Deprecation of the RC4 algorithm:

    L’utilisation répétée du même KEY_GUID RC4 ou RC4_128 sur différents blocs de données génère la même clé RC4 car SQL ServerSQL Server ne fournit pas automatiquement de salt.Repeated use of the same RC4 or RC4_128 KEY_GUID on different blocks of data, results in the same RC4 key because SQL ServerSQL Server does not provide a salt automatically. L'utilisation répétée de la même clé RC4 est une erreur connue qui entraîne un chiffrement très faible.Using the same RC4 key repeatedly is a well known error that will result in very weak encryption. Par conséquent, les mots clés RC4 et RC4_128 sont déconseillés.Therefore we have deprecated the RC4 and RC4_128 keywords. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server.This feature will be removed in a future version of 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é.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.

Avertissement

L'algorithme RC4 est uniquement pris en charge pour des raisons de compatibilité descendante.The RC4 algorithm is only supported for backward compatibility. Le nouveau matériel ne peut être chiffré à l'aide de RC4 ou de RC4_128 que lorsque la base de données se trouve dans le niveau de compatibilité 90 ou 100.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. (Non recommandé.) Utilisez à la place un algorithme plus récent, tel qu'un des algorithmes AES.(Not recommended.) Use a newer algorithm such as one of the AES algorithms instead. Dans SQL Server 2017SQL Server 2017, le matériel chiffré à l'aide de RC4 ou de RC4_128 peut être déchiffré dans n'importe quel niveau de compatibilité.In SQL Server 2017SQL Server 2017 material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.

AutorisationsPermissions

Requiert l'autorisation ALTER ANY SYMMETRIC KEY sur la base de données.Requires ALTER ANY SYMMETRIC KEY permission on the database. 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.If AUTHORIZATION is specified, requires IMPERSONATE permission on the database user or ALTER permission on the application role. 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.If encryption is by certificate or asymmetric key, requires VIEW DEFINITION permission on the certificate or asymmetric key. Les connexions Windows, les connexions SQL ServerSQL Server et les rôles d'application sont les seuls à pouvoir posséder des clés symétriques.Only Windows logins, SQL ServerSQL Server logins, and application roles can own symmetric keys. Les groupes et les rôles ne peuvent pas posséder de clés symétriques.Groups and roles cannot own symmetric keys.

ExemplesExamples

A.A. Création d'une clé symétriqueCreating a symmetric key

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.The following example creates a symmetric key called JanainaKey09 by using the AES 256 algorithm, and then encrypts the new key with certificate Shipping04.

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

B.B. Création d'une clé symétrique temporaireCreating a temporary symmetric key

Dans l'exemple ci-dessous, une clé symétrique temporaire nommée #MarketingXXV est créée à partir de la phrase secrète : The square of the hypotenuse is equal to the sum of the squares of the sides.The following example creates a temporary symmetric key called #MarketingXXV from the pass phrase: 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.The key is provisioned with a GUID that is generated from the string Pythagoras and encrypted with certificate 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.C. Création d'une clé symétrique à l'aide d'un périphérique EKM (Extensible Key Management)Creating a symmetric key using an Extensible Key Management (EKM) device

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.The following example creates a symmetric key called MySymKey by using a provider called MyEKMProvider and a key name of KeyForSensitiveData. Il assigne l'autorisation à User1 et suppose que l'administrateur système a déjà inscrit le fournisseur appelé MyEKMProvider dans SQL ServerSQL Server.It assigns authorization to User1 and assumes that the system administrator has already registered the provider called MyEKMProvider in SQL ServerSQL Server.

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

Voir aussiSee Also

Choisir un algorithme de chiffrement Choose an Encryption Algorithm
ALTER SYMMETRIC KEY (Transact-SQL) ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL) DROP SYMMETRIC KEY (Transact-SQL)
Hiérarchie de chiffrement Encryption Hierarchy
sys.symmetric_keys (Transact-SQL) sys.symmetric_keys (Transact-SQL)
Gestion de clés extensible (EKM) Extensible Key Management (EKM)
Gestion de clés extensible à l’aide d’Azure Key Vault (SQL Server)Extensible Key Management Using Azure Key Vault (SQL Server)