Créer des clés symétriques identiques sur deux serveursCreate Identical Symmetric Keys on Two Servers

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cette rubrique décrit comment créer des clés symétriques identiques sur deux serveurs différents dans SQL ServerSQL Server à l'aide de Transact-SQLTransact-SQL.This topic describes how to create identical symmetric keys on two different servers in SQL ServerSQL Server by using Transact-SQLTransact-SQL. Pour pouvoir déchiffrer du texte chiffré, vous devez posséder la clé qui a été utilisée pour le chiffrer.In order to decrypt ciphertext, you need the key that was used to encrypt it. Quand le chiffrement et le déchiffrement interviennent dans une seule base de données, la clé est stockée dans la base de données et demeure disponible, en fonction des autorisations, pour le chiffrement et le déchiffrement.When both encryption and decryption occur in a single database, the key is stored in the database and it is available, depending on permissions, for both encryption and decryption. Cependant, lorsque le chiffrement et le déchiffrement se produisent dans des bases de données distinctes ou sur des serveurs séparés, la clé stockée dans l’une des bases de données ne peut pas être utilisée dans l’autre base de données.But when encryption and decryption occur in separate databases or on separate servers, the key stored in one database is not available for use on the second database.

Avant de commencerBefore You Begin

Limitations et restrictionsLimitations and Restrictions

  • 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.

  • 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é.When a symmetric key is encrypted with a password instead of the public key of the database master key, the TRIPLE DES encryption algorithm is used. 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.

SécuritéSecurity

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.

Utilisation de Transact-SQLUsing Transact-SQL

Pour créer des clés symétriques identiques sur deux serveurs différentsTo create identical symmetric keys on two different servers

  1. Dans l' Explorateur d'objets, connectez-vous à une instance de Moteur de base de donnéesDatabase Engine.In Object Explorer, connect to an instance of Moteur de base de donnéesDatabase Engine.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.On the Standard bar, click New Query.

  3. Créez une clé en exécutant les instructions CREATE MASTER KEY, CREATE CERTIFICATE et CREATE SYMMETRIC KEY suivantes.Create a key by running the following CREATE MASTER KEY, CREATE CERTIFICATE, and CREATE SYMMETRIC KEY statements.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Connectez-vous à une instance de serveur distincte, ouvrez une fenêtre de requête différente et exécutez les instructions SQL ci-dessus pour créer la même clé sur le deuxième serveur.Connect to a separate server instance, open a different Query Window, and run the SQL statements above to create the same key on the second server.

  5. Testez les clés en exécutant d'abord les instructions OPEN SYMMETRIC KEY et SELECT ci-dessous sur le premier serveur.Test the keys by first running the OPEN SYMMETRIC KEY statement and the SELECT statement below on the first server.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. Sur le second serveur, collez le résultat de l'instruction SELECT précédente dans le code suivant comme valeur de @blob et exécutez le code suivant pour vérifier que la clé dupliquée peut déchiffrer le texte chiffré.On the second server, paste the result of the previous SELECT statement into the following code as the value of @blob and run the following code to verify that the duplicate key can decrypt the ciphertext.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Fermez les clés symétriques sur les deux serveurs.Close the symmetric key on both servers.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Modification du chiffrement dans SQL Server 2017 CU2Encryption changes in SQL Server 2017 CU2

SQL Server 2016 utilise l’algorithme de hachage SHA1 pour son travail de chiffrement.SQL Server 2016 uses the SHA1 hashing algorithm for its encryption work. À compter de SQL Server 2017, SHA2 est utilisé à la place.Starting in SQL Server 2017, SHA2 is used instead. Cela signifie que des étapes supplémentaires peuvent être nécessaires pour que votre installation de SQL Server 2017 puisse déchiffrer les éléments qui ont été chiffrées par SQL Server 2016.This means extra steps might be necessary to have your SQL Server 2017 installation decrypt items that were encrypted by SQL Server 2016. Voici les étapes supplémentaires :Here are the extra steps:

  • Vérifiez que votre ordinateur SQL Server 2017 dispose au minimum de la Mise à jour cumulative 2 (CU2).Ensure your SQL Server 2017 is updated to at least Cumulative Update 2 (CU2).
  • Après avoir installé CU2, activez l’indicateur de trace 4631 dans SQL Server 2017 : DBCC TRACEON(4631, -1);After you install CU2, turn on trace flag 4631 in SQL Server 2017: DBCC TRACEON(4631, -1);
    • L’indicateur de trace 4631 est une nouveauté dans SQL Server 2017.Trace flag 4631 is new in SQL Sewrver 2017. L’indicateur de trace 4631 doit être ON globalement avant que vous créiez la clé principale, le certificat ou la clé symétrique dans SQL Server 2017.Trace flag 4631 needs to be ON globally before you create the master key, certificate, or symmetrical key in SQL Server 2017. Ainsi, ces éléments créés peuvent interopérer avec SQL Server 2016 et versions antérieures.This enables these created items to interoperate with SQL Server 2016 and earlier versions.

Pour plus d’informations, consultez :For more guidance, see:

Informations supplémentairesFor more information