Notatka
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 SQL Server, które wykorzystują asymetryczny klucz chroniony przez Azure Key Vault, dzielą się na następujące trzy obszary:
- Przezroczyste szyfrowanie danych (TDE) przy użyciu asymetrycznego klucza z Azure Key Vault.
- Szyfrowanie kopii zapasowych za pomocą asymetrycznego klucza z magazynu kluczy.
- Szyfrowanie na poziomie kolumnowym za pomocą asymetrycznego klucza z magazynu kluczy.
Wykonaj kroki od 1 do 4 w ramach Set up Transparent Data Encryption with Azure Key Vault for SQL Server, zanim przejdziesz do kroków opisanych w tym artykule.
Notatka
Wersje 1.0.0.440 i wcześniejsze zostały zastąpione i nie są już wspierane w środowiskach produkcyjnych. Zaktualizuj do wersji 1.0.1.0 lub nowszej. Pobierz aktualną wersję z Centrum pobierania Microsoft i postępuj zgodnie z instrukcjami w sekcji „Upgrade of SQL Server Connector” w artykule SQL Server Connector maintenance and troubleshooting.
Notatka
microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).
Przezroczyste szyfrowanie danych przy użyciu asymetrycznego klucza z Azure Key Vault
Po ukończeniu kroków 1-4 w ramach Set up Transparent Data Encryption with Azure Key Vault for SQL Server, użyj klucza Azure Key Vault, aby zaszyfrować klucz szyfrujący bazy danych za pomocą TDE. Aby uzyskać więcej informacji o rotacji kluczy za pomocą programu PowerShell, zobacz Obracanie ochrony Transparent Data Encryption (TDE) przy użyciu programu PowerShell.
Ważny
Nie usuwaj poprzednich wersji klucza po rotacji. Gdy następuje rotacja kluczy, część danych jest nadal szyfrowana poprzednimi kluczami, na przykład starsze kopie zapasowe baz danych, pliki logów kopii zapasowych oraz pliki logów transakcyjnych.
Musisz utworzyć dane uwierzytelniające i login oraz stworzyć klucz szyfrowania bazy danych, który szyfruje dane i logi w bazie. Szyfrowanie bazy danych wymaga CONTROL uprawnienia do tej bazy. Poniższa grafika pokazuje hierarchię klucza szyfrującego podczas korzystania z Azure Key Vault.
Tworzenie poświadczeń programu SQL Server dla silnika bazy danych do użytku dla TDE
Database Engine wykorzystuje dane uwierzytelniające aplikacji Microsoft Entra do dostępu do Key Vault podczas ładowania bazy danych. Aby ograniczyć uprawnienia do Key Vault, które przyznajesz, utwórz kolejne Client ID i Secret, zgodnie z opisem w kroku 1: Ustaw model uwierzytelniania dla Database Engine.
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 platformy Azure, zastąp
IDENTITYargument nazwą usługi Azure Key Vault z kroku 2. Tworzenie magazynu kluczy. - Jeśli korzystasz z prywatnej chmury Azure, na przykład Azure Government, Azure obsługiwanego przez 21Vianet lub Azure Germany, zastąp argument
IDENTITYidentyfikatorem URI magazynu kluczy zwróconym w Utwórz magazyn kluczy i klucz za pomocą programu PowerShell. Nie dołączajhttps://do identyfikatora URI sejfu kluczy.
- Jeśli używasz globalnej platformy Azure, zastąp
Zastąp pierwszą część argumentu
SECRETidentyfikatorem klienta aplikacji Microsoft Entra z kroku 1: Ustaw model uwierzytelniania. W tym przykładzie identyfikator klienta jestEF5C8E094D2A4A769998D93440D8115D.Ważny
Należy usunąć łączniki z identyfikatora klienta .
Uzupełnij drugą część argumentu
SECRETwartością Client Secret z kroku 1. W tym przykładzie sekret klienta toReplaceWithAADClientSecret.Końcowy ciąg dla argumentu
SECRETto długa sekwencja liter i cyfr, bez myślnikó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 ; GOUtwórz klucz szyfrowania bazy danych (DEK)
DEK szyfruje Twoje dane i pliki logów w instancji bazy danych, a następnie jest szyfrowany asymetrycznym kluczem Azure Key Vault. Możesz stworzyć DEK, używając dowolnego algorytmu lub długości klucza, którą obsługuje SQL Server.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GOWłącz TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GOKorzystając z Management Studio, sprawdź, czy TDE jest włączone, łącząc się z bazą danych za pomocą Eksplorator obiektów. Kliknij prawym przyciskiem myszy bazę danych, wskaż Zadania, a następnie wybierz Zarządzaj szyfrowaniem bazy danych.
ekm-tde-object-explorerW 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;Notatka
Baza danych
tempdbjest automatycznie szyfrowana za każdym razem, gdy każda baza danych włączy funkcję TDE.
Szyfrowanie kopii zapasowych za pomocą asymetrycznego klucza z magazynu kluczy
Zaszyfrowane kopie zapasowe są obsługiwane od programu SQL Server 2014 (12.x). Poniższy przykład tworzy i przywraca kopię zapasową zaszyfrowaną kluczem szyfrującym dane, który jest chroniony przez klucz asymetryczny w magazynie kluczy.
Database Engine wykorzystuje dane uwierzytelniające aplikacji Microsoft Entra do dostępu do magazynu kluczy podczas ładowania bazy. Aby ograniczyć uprawnienia do magazynu kluczy, które przyznajesz, utwórz kolejne ID klienta i sekret, zgodnie z opisem w kroku 1: Ustaw model uwierzytelniania dla Database Engine.
Utwórz poświadczenie SQL Server używane przez aparat bazy danych do szyfrowania kopii zapasowych
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 platformy Azure, zastąp
IDENTITYargument nazwą usługi Azure Key Vault z kroku 2. Tworzenie magazynu kluczy. - Jeśli korzystasz z prywatnej chmury Azure, na przykład Azure Government, Microsoft Azure obsługiwanej przez 21Vianet lub Azure Germany, zastąp argument
IDENTITYidentyfikatorem URI magazynu zwróconym w sekcji Tworzenie magazynu kluczy i klucza przy użyciu programu PowerShell. Nie dołączajhttps://do identyfikatora URI sejfu kluczy.
- Jeśli używasz globalnej platformy Azure, zastąp
Zastąp pierwszą część argumentu
SECRETidentyfikatorem Identyfikator klienta aplikacji Microsoft Entra z kroku 1: Ustaw model uwierzytelniania. W tym przykładzie identyfikator klienta jestEF5C8E094D2A4A769998D93440D8115D.Ważny
Należy usunąć łączniki z identyfikatora klienta .
Uzupełnij drugą część argumentu
SECRETwartością Client Secret z kroku 1. W tym przykładzie sekret klienta toReplace-With-AAD-Client-Secret. Ostatni ciąg dla argumentuSECRETto długa sekwencja liter i cyfr, bez myślnikó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;
Utwórz login SQL Server dla Database Engine do szyfrowania kopii zapasowych
Utwórz login SQL Server do użycia przez silnik bazy danych na potrzeby zaszyfrowanych kopii zapasowych i dodaj do niego poświadczenie z kroku 1. W tym przykładzie Transact-SQL użyto tego samego klucza, który został zaimportowany wcześniej.
Ważny
Nie możesz użyć tego samego asymetrycznego klucza do szyfrowania kopii zapasowej, jeśli już używałeś tego klucza do TDE (w poprzednim przykładzie) lub szyfrowania na poziomie kolumnowym (poniższy przykład).
Ten przykład wykorzystuje asymetryczny klucz
CONTOSO_KEY_BACKUPprzechowywany w sejfie kluczy, który można wcześniej zaimportować lub utworzyć dlamasterbazy danych, jak opisano w kroku 2: Utworzenie sejfu kluczy.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 ; GOZrób kopię zapasową bazy danych
Zrób kopię zapasową bazy danych, określając szyfrowanie asymetrycznym kluczem przechowywanym w usłudze Key Vault.
W poniższym przykładzie należy zauważyć, że jeśli baza danych była już zaszyfrowana za pomocą TDE, a klucz
CONTOSO_KEY_BACKUPasymetryczny różni się od klucza asymetrycznego TDE, kopia zapasowa jest szyfrowana zarówno przez klucz asymetryczny TDE, jak iCONTOSO_KEY_BACKUP. Docelowa instancja SQL Server potrzebuje obu kluczy do odszyfrowania kopii zapasowej.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]); GOPrzywróć bazę danych
Aby przywrócić kopię zapasową bazy danych zaszyfrowaną przy użyciu TDE, docelowa instancja programu SQL Server musi najpierw mieć kopię asymetrycznego klucza magazynu kluczy użytego do szyfrowania. Aby dostarczyć tę kopię:
Jeśli oryginalny asymetryczny klucz używany do TDE nie znajduje się już w magazynie kluczy, przywróć kopię zapasową klucza z magazynu kluczy lub zaimportuj go ponownie z lokalnego modułu HSM. Aby odcisk kciuka klucza odpowiadał odciskowi kciuka zapisanemu w kopii zapasowej bazy danych, klucz musi używać tej samej nazwy klucza z magazynu kluczy, co pierwotnie.
Zastosuj kroki 1 i 2 na docelowej instancji SQL Server.
Po tym, jak docelowa instancja SQL Server uzyska dostęp do asymetrycznych kluczy używanych do szyfrowania kopii zapasowej, przywróć bazę danych na tym serwerze.
Przykładowy kod przywracania:
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GOAby uzyskać więcej informacji na temat opcji tworzenia kopii zapasowych, zobacz BACKUP (Transact-SQL).
Szyfrowanie na poziomie kolumn za pomocą asymetrycznego klucza z magazynu kluczy
Poniższy przykład tworzy klucz symetryczny chroniony kluczem asymetrycznym w magazynie kluczy. Klucz symetryczny następnie szyfruje dane w bazie danych.
Ważny
Nie możesz użyć tego samego asymetrycznego klucza do szyfrowania na poziomie kolumnowym, jeśli już używałeś tego klucza do szyfrowania kopii zapasowej.
Ten przykład wykorzystuje asymetryczny klucz CONTOSO_KEY_COLUMNS przechowywany w magazynie kluczy, który można zaimportować lub utworzyć wcześniej, jak opisano w kroku 2: Utworzenie magazynu kluczy. Aby użyć tego asymetrycznego klucza w bazie ContosoDatabase danych, uruchom ponownie polecenie CREATE ASYMMETRIC KEY, aby nadać bazie ContosoDatabase danych odniesienie 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;