Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Typowe działania szyfrowania programu SQL Server korzystające z klucza asymetrycznego chronionego przez usługę Azure Key Vault obejmują następujące trzy obszary.
Transparent Data Encryption przy użyciu klucza asymetrycznego z usługi Azure Key Vault
Szyfrowanie kopii zapasowych przy użyciu klucza asymetrycznego z usługi Key Vault
Szyfrowanie na poziomie kolumny przy użyciu klucza asymetrycznego z usługi Key Vault
Wykonaj czynności opisane w częściach I do IV tematu Kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault, przed wykonaniem czynności opisanych w tym temacie.
Notatka
Wersje 1.0.0.440 i starsze zostały zastąpione i nie są już obsługiwane w środowiskach produkcyjnych. Uaktualnij do wersji 1.0.1.0 lub nowszej, odwiedzając Centrum pobierania Microsoft i korzystając z instrukcji dotyczących konserwacji łącznika programu SQL Server & stronie Rozwiązywanie problemów z w obszarze "Uaktualnianie łącznika programu SQL Server".
Notatka
microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).
Transparent Data Encryption przy użyciu klucza asymetrycznego z usługi Azure Key Vault
Po ukończeniu części I do IV tematu Kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault użyj klucza usługi Azure Key Vault, aby zaszyfrować klucz szyfrowania bazy danych przy użyciu funkcji TDE. Aby uzyskać więcej informacji na temat obracania kluczy przy użyciu PowerShell, zobacz Obracanie protektora przezroczystego szyfrowania danych (TDE) przy użyciu PowerShell.
Ważny
Nie usuwaj poprzednich wersji klucza po zmianie. Po przerzucaniu kluczy niektóre dane są nadal szyfrowane przy użyciu poprzednich kluczy, takich jak starsze kopie zapasowe bazy danych, pliki dziennika kopii zapasowej i pliki dziennika transakcji.
Należy utworzyć poświadczenia i identyfikator logowania oraz utworzyć klucz szyfrowania bazy danych, który będzie szyfrować dane i dzienniki w bazie danych. Aby zaszyfrować bazę danych, wymagane jest uprawnienie CONTROL do bazy danych. Poniższa grafika przedstawia hierarchię klucza szyfrowania podczas korzystania z usługi Azure Key Vault.
Tworzenie poświadczeń programu SQL Server dla silnika bazy danych do użytku dla TDE
Silnik bazy danych używa poświadczeń aplikacji Microsoft Entra do uzyskiwania dostępu do Azure Key Vault podczas ładowania bazy danych. Zalecamy utworzenie innego identyfikatora klienta i tajnego kluczazgodnie z opisem w Kroku 1dla silnika bazy danych, w celu ograniczenia przyznanych uprawnień do Key Vault.
Zmodyfikuj poniższy skrypt Transact-SQL w następujący sposób:
Edytuj argument
IDENTITY
(ContosoDevKeyVault
), aby wskazać usługę Azure Key Vault.- Jeśli używasz globalnej usługi Azure, zastąp argument
IDENTITY
nazwą usługi Azure Key Vault z części II. - Jeśli używasz prywatnej chmury platformy Azure (np. Azure Government, Azure obsługiwanej przez firmę 21Vianet lub Azure (Niemcy), zastąp argument
IDENTITY
identyfikatorem URI magazynu zwróconym w części II, krok 3. Nie dołączaj "https://" w adresie URL magazynu.
- Jeśli używasz globalnej usługi Azure, zastąp argument
Zastąp pierwszą część argumentu
SECRET
aplikacją Microsoft Entra Client ID z Krok 1. W tym przykładzie identyfikator klienta jestEF5C8E094D2A4A769998D93440D8115D
.Ważny
Należy usunąć łączniki z identyfikatora klienta .
Ukończ drugą część argumentu
SECRET
z kluczem tajnym klienta z części I. W tym przykładzie klucz tajny klienta z części I jestReplaceWithAADClientSecret
.Ostatnim ciągiem argumentu SECRET będzie długa sekwencja liter i cyfr bez łączników.
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Utwórz login SQL Server dla silnika bazy danych dla TDE
Utwórz identyfikator logowania programu SQL Server i dodaj do niego poświadczenia z kroku 1. W tym przykładzie Transact-SQL użyto tego samego klucza, który został zaimportowany wcześniej.
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GO
tworzenie klucza szyfrowania bazy danych (DEK)
Klucz Szyfrowania Danych (DEK) zaszyfruje pliki danych i dziennika w wystąpieniu bazy danych, a następnie sam zostanie zaszyfrowany przez asymetryczny klucz Azure Key Vault. Klucz szyfrowania danych (DEK) można utworzyć przy użyciu dowolnego algorytmu lub długości klucza obsługiwanego przez SQL Server.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO
Włącz TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GO
Za pomocą programu Management Studio sprawdź, czy funkcja TDE została włączona, łącząc się z bazą danych za pomocą Eksploratora obiektów. Kliknij prawym przyciskiem myszy bazę danych, wskaż polecenie Tasks, a następnie kliknij Zarządzaj szyfrowaniem bazy danych.
ekm-tde-object-explorer
W oknie dialogowym Zarządzanie Szyfrowaniem Bazy Danych upewnij się, że TDE jest włączone i który klucz asymetryczny jest używany do szyfrowania klucza szyfrowania danych.
Alternatywnie można wykonać następujący skrypt Transact-SQL. Stan szyfrowania 3 wskazuje zaszyfrowaną bazę danych.
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;
Nota
Baza danych
tempdb
jest automatycznie szyfrowana za każdym razem, gdy każda baza danych włączy funkcję TDE.
Szyfrowanie kopii zapasowych przy użyciu klucza asymetrycznego z usługi Key Vault
Zaszyfrowane kopie zapasowe są obsługiwane od programu SQL Server 2014 (12.x). Poniższy przykład tworzy i przywraca kopię zapasową zaszyfrowaną za pomocą klucza szyfrowania danych chronionego kluczem asymetrycznym w magazynie kluczy.
Silnik bazy danych używa poświadczeń aplikacji Microsoft Entra, aby uzyskać dostęp do usługi Key Vault podczas ładowania bazy danych. Zalecamy utworzenie innego identyfikatora klienta i tajnego klucza, zgodnie z opisem w Kroku 1, dla silnika bazy danych, aby ograniczyć przyznane uprawnienia usługi Key Vault.
Utwórz poświadczenie SQL Server dla silnika bazy danych do użycia przy szyfrowaniu kopii zapasowej
Zmodyfikuj poniższy skrypt Transact-SQL w następujący sposób:
Edytuj argument
IDENTITY
(ContosoDevKeyVault
), aby wskazać usługę Azure Key Vault.- Jeśli używasz globalnej usługi Azure, zastąp argument
IDENTITY
nazwą usługi Azure Key Vault z części II. - Jeśli używasz prywatnej chmury platformy Azure (np. Azure Government, Microsoft Azure obsługiwanej przez firmę 21Vianet lub Azure Germany), zastąp argument
IDENTITY
identyfikatorem URI magazynu zwróconym w części II, krok 3. Nie dołączaj "https://" w URI magazynu.
- Jeśli używasz globalnej usługi Azure, zastąp argument
Zastąp pierwszą część argumentu
SECRET
aplikacją Microsoft Entra Client ID z Krok 1. W tym przykładzie identyfikator klienta jestEF5C8E094D2A4A769998D93440D8115D
.Ważny
Należy usunąć łączniki z identyfikatora klienta .
Ukończ drugą część argumentu
SECRET
za pomocą Klucz Tajny Klienta z części I. W tym przykładzie Klucz Tajny Klienta z części I toReplace-With-AAD-Client-Secret
. Ostatni ciąg dla argumentuSECRET
będzie długą sekwencją liter i cyfr bez łączników .USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Tworzenie konta logowania SQL Server dla silnika bazy danych na potrzeby szyfrowania kopii zapasowych
Utwórz login SQL Server do użytku przez silnik bazy danych dla kopii zapasowych szyfrowanych i dodaj poświadczenie z kroku 1 do niego. W tym przykładzie Transact-SQL użyto tego samego klucza, który został zaimportowany wcześniej.
Ważny
Nie można użyć tego samego klucza asymetrycznego do szyfrowania kopii zapasowych, jeśli klucz został już użyty dla funkcji TDE (powyższy przykład) lub szyfrowanie na poziomie kolumny (poniższy przykład).
W tym przykładzie użyto klucza asymetrycznego
CONTOSO_KEY_BACKUP
przechowywanego w magazynie kluczy, który można zaimportować lub utworzyć wcześniej dla głównej bazy danych, tak jak opisano w części IV, kroku 5.USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GO
tworzenie kopii zapasowej bazy danych
Utwórz kopię zapasową bazy danych określającą szyfrowanie przy użyciu klucza asymetrycznego przechowywanego w magazynie kluczy.
W poniższym przykładzie należy pamiętać, że jeśli baza danych została już zaszyfrowana za pomocą funkcji TDE, a klucz asymetryczny
CONTOSO_KEY_BACKUP
różni się od klucza asymetrycznego TDE, kopia zapasowa zostanie zaszyfrowana zarówno za pomocą klucza asymetrycznego TDE, jak iCONTOSO_KEY_BACKUP
. Docelowa instancja SQL Server będzie potrzebować obu kluczy, aby odszyfrować kopię bezpieczeństwa.USE master; BACKUP DATABASE [DATABASE_TO_BACKUP] TO DISK = N'[PATH TO BACKUP FILE]' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]); GO
przywracanie bazy danych
Aby przywrócić kopię zapasową bazy danych zaszyfrowaną za pomocą funkcji TDE, docelowy serwer SQL Server musi najpierw mieć kopię asymetrycznego klucza Azure Key Vault używanego do szyfrowania. W ten sposób można to osiągnąć:
Jeśli oryginalny klucz asymetryczny używany dla funkcji TDE nie znajduje się już w usłudze Key Vault, przywróć kopię zapasową klucza usługi Key Vault lub ponownie zaimportuj klucz z lokalnego modułu HSM. Ważne: Aby odcisk palca klucza był zgodny z odciskiem palca zapisanym w kopii zapasowej bazy danych, klucz musi mieć tę samą nazwę klucza jak pierwotnie.
Zastosuj kroki 1 i 2 na docelowym serwerze SQL Server.
Jak tylko docelowe wystąpienie programu SQL Server ma dostęp do klucza asymetrycznego używanego do szyfrowania kopii zapasowej, przywróć bazę danych na serwerze.
Przykładowy kod przywracania:
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GO
Aby uzyskać więcej informacji na temat opcji tworzenia kopii zapasowych, zobacz BACKUP (Transact-SQL).
Szyfrowanie na poziomie kolumny przy użyciu klucza asymetrycznego z usługi Key Vault
Poniższy przykład tworzy klucz symetryczny chroniony kluczem asymetrycznym w magazynie kluczy. Następnie klucz symetryczny jest używany do szyfrowania danych w bazie danych.
Ważny
Nie można użyć tego samego klucza asymetrycznego do szyfrowania na poziomie kolumny, jeśli klucz został już użyty do szyfrowania kopii zapasowej.
W tym przykładzie użyto klucza asymetrycznego CONTOSO_KEY_COLUMNS
przechowywanego w magazynie kluczy, który można zaimportować lub utworzyć wcześniej, zgodnie z opisem w kroku 3 sekcji 3 kroków konfiguracji w celu rozszerzenia zarządzania kluczami przy użyciu usługi Azure Key Vault. Aby użyć tego klucza asymetrycznego w bazie danych ContosoDatabase
, należy ponownie wykonać instrukcję CREATE ASYMMETRIC KEY
, aby podać bazę danych ContosoDatabase
z odwołaniem do klucza.
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY
(
KEY_GUID('DATA_ENCRYPTION_KEY'),
CONVERT(VARBINARY,'Plain text data to encrypt')
);
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
Zobacz też
kroki instalacji rozszerzalnego zarządzania kluczami przy użyciu usługi Azure Key Vault
rozszerzone zarządzanie kluczami przy użyciu usługi Azure Key Vault
opcja konfiguracji serwera z włączoną obsługą dostawcy EKM
Konserwacja konnektora SQL Server & Rozwiązywanie problemów