Creare chiavi simmetriche identiche su due serverCreate Identical Symmetric Keys on Two Servers

In questo argomento viene descritto come creare chiavi simmetriche identiche in due server diversi in SQL Server 2017SQL Server 2017 tramite Transact-SQLTransact-SQL.This topic describes how to create identical symmetric keys on two different servers in SQL Server 2017SQL Server 2017 by using Transact-SQLTransact-SQL. Al fine di decrittografare l'argomento ciphertext, è necessario disporre della chiave usata per crittografarlo.In order to decrypt ciphertext, you need the key that was used to encrypt it. Quando la crittografia e la decrittografia vengono eseguite in un unico database, la chiave viene archiviata nel database ed è disponibile, a seconda delle autorizzazioni, sia per la crittografia che per la decrittografia.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. Viceversa, quando la crittografia e la decrittografia vengono eseguite in database separati, la chiave archiviata in un database non è disponibile per l'utilizzo nell'altro database.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

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

  • Quando si crea una chiave simmetrica è necessario crittografarla con almeno uno degli elementi seguenti: certificato, password, chiave simmetrica, chiave asimmetrica o 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. Una chiave può essere crittografata con più elementi di ogni tipo,The key can have more than one encryption of each type. ovvero una singola chiave simmetrica può essere crittografata contemporaneamente con più certificati, password, chiavi simmetriche e chiavi asimmetriche.In other words, a single symmetric key can be encrypted by using multiple certificates, passwords, symmetric keys, and asymmetric keys at the same time.

  • Se si crittografa una chiave simmetrica con una password anziché con la chiave pubblica della chiave master del database, viene usato l'algoritmo di crittografia TRIPLE DES.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. Per questo motivo, le chiavi create con un algoritmo di crittografia avanzato, come AES, vengono a loro volta protette con un algoritmo meno avanzato.Because of this, keys that are created with a strong encryption algorithm, such as AES, are themselves secured by a weaker algorithm.

Sicurezza Security

Autorizzazioni Permissions

È richiesta l'autorizzazione ALTER ANY SYMMETRIC KEY per il database.Requires ALTER ANY SYMMETRIC KEY permission on the database. Se si specifica AUTHORIZATION, è richiesta l'autorizzazione IMPERSONATE per l'utente di database o l'autorizzazione ALTER per il ruolo applicazione.If AUTHORIZATION is specified, requires IMPERSONATE permission on the database user or ALTER permission on the application role. Se la crittografia viene applicata con un certificato o una chiave asimmetrica, è richiesta l'autorizzazione VIEW DEFINITION per il certificato o la chiave asimmetrica.If encryption is by certificate or asymmetric key, requires VIEW DEFINITION permission on the certificate or asymmetric key. Solo gli account di accesso di Windows e di SQL ServerSQL Server e i ruoli applicazione possono disporre di chiavi simmetriche.Only Windows logins, SQL ServerSQL Server logins, and application roles can own symmetric keys. I gruppi e i ruoli non possono disporre di chiavi simmetriche.Groups and roles cannot own symmetric keys.

Utilizzo di Transact-SQL Using Transact-SQL

Per creare chiavi simmetriche identiche su due server diversiTo create identical symmetric keys on two different servers

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine.

  2. Sulla barra Standard fare clic su Nuova query.On the Standard bar, click New Query.

  3. Creare una chiave eseguendo le seguenti istruzioni CREATE MASTER KEY, CREATE CERTIFICATE e CREATE SYMMETRIC KEY.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. Connettersi a un'istanza del server separata, aprire una finestra Query diversa ed eseguire le istruzioni SQL precedenti per creare la stessa chiave nel secondo server.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. Verificare le chiavi eseguendo prima l'istruzione OPEN SYMMETRIC KEY e quindi l'istruzione SELECT seguente nel primo server.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. Nell'altro server incollare il risultato dell'istruzione SELECT precedente nel codice indicato di seguito come valore di @blob ed eseguire il codice per verificare che la chiave duplicata sia in grado di decrittografare il testo crittografato.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. Chiudere la chiave simmetrica in entrambi i server.Close the symmetric key on both servers.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

    Per altre informazioni, vedere quanto segue:For more information, see the following: