Delen via


Identieke symmetrische sleutels maken op twee servers

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

In dit onderwerp wordt beschreven hoe u identieke symmetrische sleutels maakt op twee verschillende servers in SQL Server met behulp van Transact-SQL. Als u coderingstekst wilt ontsleutelen, hebt u de sleutel nodig die is gebruikt om deze te versleutelen. Wanneer zowel versleuteling als ontsleuteling plaatsvindt in één database, wordt de sleutel opgeslagen in de database en is deze beschikbaar, afhankelijk van machtigingen, voor zowel versleuteling als ontsleuteling. Maar wanneer versleuteling en ontsleuteling plaatsvindt in afzonderlijke databases of op afzonderlijke servers, is de sleutel die in één database is opgeslagen, niet beschikbaar voor gebruik op de tweede database.

Voordat u begint

Beperkingen en beperkingen

  • Wanneer een symmetrische sleutel wordt gemaakt, moet de symmetrische sleutel worden versleuteld met ten minste een van de volgende waarden: certificaat, wachtwoord, symmetrische sleutel, asymmetrische sleutel of PROVIDER. De sleutel kan meer dan één versleuteling van elk type hebben. Met andere woorden, één symmetrische sleutel kan tegelijkertijd worden versleuteld met behulp van meerdere certificaten, wachtwoorden, symmetrische sleutels en asymmetrische sleutels.

  • Wanneer een symmetrische sleutel wordt versleuteld met een wachtwoord in plaats van de openbare sleutel van de hoofdsleutel van de database, wordt het TRIPLE DES-versleutelingsalgoritmen gebruikt. Hierdoor worden sleutels die zijn gemaakt met een sterk versleutelingsalgoritmen, zoals AES, zelf beveiligd door een zwakker algoritme.

Veiligheid

Machtigingen

Vereist ALTER ANY SYMMETRIC KEY-machtiging voor de database. Als AUTORISATIE is opgegeven, is IMPERSONEREN-machtiging vereist op de databasegebruiker of ALTER-machtiging op de toepassingsrol. Indien de versleuteling door middel van een certificaat of asymmetrische sleutel is, is voor het certificaat of de asymmetrische sleutel de machtiging VIEW DEFINITION vereist. Alleen Windows-aanmeldingen, SQL Server-aanmeldingen en toepassingsrollen kunnen eigenaar zijn van symmetrische sleutels. Groepen en rollen kunnen geen symmetrische sleutels bezitten.

Transact-SQL gebruiken

Identieke symmetrische sleutels maken op twee verschillende servers

  1. Maak in Objectverkennerverbinding met een exemplaar van Database Engine.

  2. Klik op de standaardbalk op Nieuwe query.

  3. Maak een sleutel door de volgende INSTRUCTIE CREATE MASTER KEY, CREATE CERTIFICATE en CREATE SYMMETRIC KEY uit te voeren. Vervang <password> door een geldig wachtwoord.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';  
    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. Maak verbinding met een afzonderlijk serverexemplaren, open een ander queryvenster en voer de bovenstaande SQL-instructies uit om dezelfde sleutel op de tweede server te maken.

  5. Test de sleutels door eerst de instructie OPEN SYMMETRIC KEY en de SELECT-instructie hieronder op de eerste server uit te voeren.

    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. Plak op de tweede server het resultaat van de vorige SELECT-instructie in de volgende code als de waarde van @blob en voer de volgende code uit om te controleren of de dubbele sleutel de coderingstekst kan ontsleutelen.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Sluit de symmetrische sleutel op beide servers.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Versleutelingswijzigingen in SQL Server 2017 CU2

SQL Server 2016 maakt gebruik van het SHA1-hashingalgoritme voor het versleutelingswerk. Vanaf SQL Server 2017 wordt SHA2 gebruikt. Dit betekent dat er mogelijk extra stappen nodig zijn om uw SQL Server 2017-installatieitems te ontsleutelen die zijn versleuteld door SQL Server 2016. Dit zijn de extra stappen:

  • Zorg ervoor dat uw SQL Server 2017 is bijgewerkt naar ten minste cumulatieve update 2 (CU2).
  • Nadat u CU2 hebt geïnstalleerd, schakelt u traceringsvlag 4631 in SQL Server 2017 in: DBCC TRACEON(4631, -1);
    • Traceringsvlag 4631 is nieuw geïntroduceerd in SQL Server 2017. Traceringsvlag 4631 moet globaal worden ON voordat u de hoofdsleutel, het certificaat of de symmetrische sleutel in SQL Server 2017 maakt. Hierdoor kunnen deze gemaakte items samenwerken met SQL Server 2016 en eerdere versies. Deze traceringsvlag mag alleen tijdelijk worden ingeschakeld om de herversleuteling van gegevens met SHA2-afgeleide sleutels uit te voeren.

Zie voor meer informatie:

Zie ook