Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure 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
Maak in Objectverkennerverbinding met een exemplaar van Database Engine.
Klik op de standaardbalk op Nieuwe query.
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
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.
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
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
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).
- Zie Cumulatieve update 2 (CU2) voor SQL Server 2017 voor belangrijke informatie.
- 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.
- Traceringsvlag 4631 is nieuw geïntroduceerd in SQL Server 2017. Traceringsvlag 4631 moet globaal worden
Zie voor meer informatie: