Tworzenie i przechowywanie kluczy głównych kolumn dla funkcji Always Encrypted
Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Klucze główne kolumn są kluczami chroniącymi, które są używane w funkcji Always Encrypted do szyfrowania kluczy szyfrowania kolumn. Klucze główne kolumn muszą być przechowywane w zaufanym magazynie kluczy, a klucze muszą być dostępne dla aplikacji, które muszą szyfrować lub odszyfrowywać dane, oraz narzędzia do konfigurowania kluczy Always Encrypted i zarządzania kluczami Always Encrypted.
Ten artykuł zawiera szczegółowe informacje dotyczące wybierania magazynu kluczy i tworzenia kluczy głównych kolumn dla funkcji Always Encrypted. Aby uzyskać szczegółowe omówienie, zobacz
Wybieranie repozytorium kluczy dla klucza głównego kolumny
Funkcja Always Encrypted obsługuje różne magazyny kluczy do przechowywania kluczy głównych dla kolumn Always Encrypted. Obsługiwane magazyny kluczy różnią się w zależności od używanego sterownika i wersji.
Istnieją dwie kategorie magazynów kluczy wysokiego poziomu do rozważenia — magazyny kluczy lokalnychi scentralizowane magazyny kluczy.
Lokalny lub scentralizowany magazyn kluczy?
lokalne magazyny kluczy — mogą być używane tylko przez aplikacje na komputerach, które zawierają lokalny magazyn kluczy. Innymi słowy, należy replikować magazyn kluczy i klucz do każdego komputera z uruchomioną aplikacją. Przykładem lokalnego magazynu kluczy jest magazyn certyfikatów systemu Windows. W przypadku korzystania z lokalnego magazynu kluczy należy upewnić się, że magazyn kluczy istnieje na każdej maszynie hostującym aplikację i że komputer zawiera klucze główne kolumny, których aplikacja potrzebuje, aby uzyskać dostęp do danych chronionych przy użyciu funkcji Always Encrypted. Podczas tworzenia klucza głównego kolumny po raz pierwszy lub zmiany klucza, trzeba upewnić się, że klucz zostanie wdrożony na wszystkich maszynach, na których działa Twoja aplikacja.
scentralizowane magazyny kluczy — obsługują aplikacje na wielu komputerach. Przykładem scentralizowanego magazynu kluczy jest Azure Key Vault. Scentralizowany magazyn kluczy zwykle ułatwia zarządzanie kluczami, ponieważ nie trzeba obsługiwać wielu kopii kluczy głównych kolumn na wielu maszynach. Upewnij się, że aplikacje są skonfigurowane do łączenia się ze scentralizowanym magazynem kluczy.
Które magazyny kluczy są obsługiwane w sterownikach klienta z włączoną funkcją Always Encrypted?
Sterowniki klienta z włączoną funkcją Always Encrypted to sterowniki klienta programu SQL Server, które mają wbudowaną obsługę dołączania funkcji Always Encrypted do aplikacji klienckich. Sterowniki z obsługą funkcji Always Encrypted obejmują kilku wbudowanych dostawców popularnych magazynów kluczy. Niektóre sterowniki umożliwiają również implementację i rejestrację niestandardowego dostawcy magazynu kluczy nadrzędnych dla kolumn, co umożliwia użycie dowolnego magazynu kluczy, nawet jeśli nie ma dla niego wbudowanego dostawcy. Podczas podejmowania decyzji między wbudowanym dostawcą a dostawcą niestandardowym należy wziąć pod uwagę, że użycie wbudowanego dostawcy zwykle oznacza mniej zmian w aplikacjach (w niektórych przypadkach wymagana jest tylko zmiana parametrów połączenia bazy danych).
Dostępni dostawcy wbudowani zależą od wybranego sterownika, wersji sterownika i systemu operacyjnego. Zapoznaj się z dokumentacją funkcji Always Encrypted dla określonego sterownika, aby określić, które magazyny kluczy są obsługiwane w standardzie oraz czy sterownik obsługuje niestandardowych dostawców magazynów kluczy — Tworzenie aplikacji przy użyciu funkcji Always Encrypted.
Które magazyny kluczy są obsługiwane w narzędziach SQL?
SQL Server Management Studio, Azure Data Studio i moduł SqlServer w PowerShell obsługują klucze główne kolumn przechowywane w:
Magazyny kluczy i zarządzane moduły HSM w usłudze Azure Key Vault.
Notatka
Zarządzane moduły HSM wymagają programu SSMS 18.9 lub nowszego oraz modułu SqlServer PowerShell w wersji 21.1.18235 lub nowszej. Usługa Azure Data Studio obecnie nie obsługuje zarządzanych modułów HSM.
Magazyn certyfikatów systemu Windows.
Magazyny kluczy kryptograficznych, takie jak moduł zabezpieczeń sprzętowych, zapewniające interfejs API kryptografii następnej generacji (CNG) lub interfejs API kryptografii (CAPI).
Tworzenie głównych kluczy kolumn w magazynie certyfikatów systemu Windows
Klucz główny kolumny może być certyfikatem przechowywanym w magazynie certyfikatów systemu Windows. Sterownik z obsługą funkcji Always Encrypted nie weryfikuje daty wygaśnięcia ani łańcucha urzędów certyfikacji. Certyfikat jest po prostu używany jako para kluczy składająca się z klucza publicznego i prywatnego.
Aby być prawidłowym kluczem głównym kolumny, certyfikat musi:
- być certyfikatem X.509.
- być przechowywane w jednej z dwóch lokalizacji magazynu certyfikatów: lokalnej maszyny lub bieżącego użytkownika. (Aby utworzyć certyfikat w lokalizacji magazynu certyfikatów komputera lokalnego, musisz być administratorem na maszynie docelowej).
- zawierają klucz prywatny (zalecana długość kluczy w certyfikacie to 2048 bitów lub większa).
- należy utworzyć na potrzeby wymiany kluczy.
Istnieje wiele sposobów tworzenia certyfikatu, który jest prawidłowym kluczem głównym kolumny, ale najprostszą opcją jest utworzenie certyfikatu z podpisem własnym.
Tworzenie certyfikatu z podpisem własnym przy użyciu programu PowerShell
Użyj polecenia cmdlet New-SelfSignedCertificate, aby utworzyć samopodpisany certyfikat. W poniższym przykładzie pokazano, jak wygenerować certyfikat, który może być używany jako klucz główny kolumny dla funkcji Always Encrypted.
# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
Tworzenie certyfikatu z podpisem własnym przy użyciu programu SQL Server Management Studio (SSMS)
Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie kluczy Always Encrypted przy użyciu SQL Server Management Studio. Aby zapoznać się z samouczkiem krok po kroku, który używa programu SSMS i przechowuje klucze Always Encrypted w magazynie certyfikatów systemu Windows, zobacz samouczek kreatora Always Encrypted (Magazyn certyfikatów systemu Windows).
Udostępnianie certyfikatów aplikacjom i użytkownikom
Jeśli klucz główny kolumny jest certyfikatem przechowywanym na komputerze lokalnym lokalizacji magazynu certyfikatów, należy wyeksportować certyfikat z kluczem prywatnym i zaimportować go do wszystkich maszyn hostujących aplikacje, które mają szyfrować lub odszyfrować dane przechowywane w zaszyfrowanych kolumnach lub narzędzia do konfigurowania funkcji Always Encrypted i zarządzania kluczami Always Encrypted. Ponadto każdy użytkownik musi mieć nadane uprawnienia do odczytu certyfikatu przechowywanego w lokalizacji magazynu certyfikatów komputera lokalnego, aby móc używać certyfikatu jako klucza głównego kolumn.
Jeśli klucz główny kolumny jest certyfikatem przechowywanym w bieżącego użytkownika lokalizacji magazynu certyfikatów, należy wyeksportować certyfikat z kluczem prywatnym i zaimportować go do lokalizacji magazynu certyfikatów bieżącego użytkownika wszystkich kont użytkowników z uruchomionymi aplikacjami, które mają szyfrować lub odszyfrować dane przechowywane w zaszyfrowanych kolumnach, lub narzędzia do konfigurowania funkcji Always Encrypted i zarządzania kluczami Always Encrypted (na wszystkich maszynach zawierających te aplikacje/narzędzia). Nie jest wymagana żadna konfiguracja uprawnień — po zalogowaniu się na maszynie użytkownik może uzyskać dostęp do wszystkich certyfikatów w bieżącej lokalizacji magazynu certyfikatów użytkownika.
Korzystanie z programu PowerShell
Użyj poleceń cmdlet Import-PfxCertificate i Export-PfxCertificate, aby zaimportować i wyeksportować certyfikat.
Korzystanie z programu Microsoft Management Console
Aby udzielić użytkownikowi uprawnienia Odczyt dla certyfikatu przechowywanego w lokalizacji magazynu certyfikatów komputera lokalnego, wykonaj następujące kroki:
- Otwórz wiersz polecenia i wpisz mmc.
- W konsoli programu MMC w menu plik
kliknij pozycję Dodaj/Usuń przystawkę . - W oknie dialogowym dodawanie/usuwanie przystawki kliknij przycisk Dodaj.
- W oknie dialogowym Dodaj przystawkę kliknij pozycję Certyfikaty, kliknij przycisk Dodaj.
- W oknie dialogowym przystawki Certyfikaty kliknij Konto komputera , a następnie kliknij Zakończ .
- W oknie dialogowym Dodawanie autonomicznej przystawki kliknij przycisk Zamknij.
- W oknie dialogowym dodawanie/usuwanie przystawki kliknij przycisk OK.
- W przystawce Certyfikaty znajdź certyfikat w folderze Certyfikaty > Osobiste, kliknij prawym przyciskiem myszy certyfikat, wskaż polecenie Wszystkie zadania, a następnie kliknij Zarządzaj kluczami prywatnymi.
- W razie potrzeby, w oknie dialogowym Zabezpieczeń dodaj uprawnienie do odczytu dla konta użytkownika.
Tworzenie kluczy głównych kolumn w usłudze Azure Key Vault
Usługa Azure Key Vault pomaga chronić klucze kryptograficzne i wpisy tajne i jest wygodną opcją przechowywania kluczy głównych kolumn dla funkcji Always Encrypted, zwłaszcza jeśli aplikacje są hostowane na platformie Azure. Aby utworzyć klucz w usłudze Azure Key Vault, potrzebujesz subskrypcji platformy Azure i usługi Azure Key Vault. Klucz może być przechowywany w magazynie kluczy lub w zarządzanym module HSM. Aby być prawidłowym kluczem głównym kolumny, klucz zarządzany w usłudze Azure Key Vault musi być kluczem RSA.
Korzystanie z interfejsu wiersza polecenia platformy Azure, portalu lub programu PowerShell
Aby uzyskać informacje na temat tworzenia klucza w magazynie kluczy, zobacz:
- Szybki start: ustawianie i pobieranie klucza z usługi Azure Key Vault przy użyciu interfejsu wiersza polecenia platformy Azure
- Szybki start: ustawianie i pobieranie klucza z usługi Azure Key Vault przy użyciu programu Azure PowerShell
- Szybki start: ustawianie i pobieranie klucza z usługi Azure Key Vault przy użyciu witryny Azure Portal
Aby uzyskać informacje na temat tworzenia klucza w zarządzanym module HSM, zobacz:
SQL Server Management Studio (SSMS)
Aby uzyskać szczegółowe informacje na temat tworzenia klucza głównego kolumny w magazynie kluczy lub zarządzanego modułu HSM w usłudze Azure Key Vault przy użyciu programu SSMS, zobacz Provision Always Encrypted keys using SQL Server Management Studio. Aby zapoznać się z samouczkiem krok po kroku, który używa programu SSMS i przechowuje klucze Always Encrypted w magazynie kluczy, zobacz samouczek Always Encrypted Wizard (Azure Key Vault).
Udostępnianie kluczy usługi Azure Key Vault aplikacjom i użytkownikom
Aby uzyskać dostęp do zaszyfrowanej kolumny, aplikacja musi mieć dostęp do usługi Azure Key Vault, a także musi mieć określone uprawnienia do klucza głównego kolumny, aby odszyfrować klucz szyfrowania kolumny chroniący kolumnę.
Aby zarządzać kluczami dla funkcji Always Encrypted, musisz mieć uprawnienia do wyświetlania listy i tworzenia kluczy głównych kolumn w usłudze Azure Key Vault oraz wykonywania operacji kryptograficznych przy użyciu kluczy.
Skrytki kluczy
Jeśli przechowujesz klucze główne kolumn w magazynie kluczy i używasz uprawnień przypisanych do ról do autoryzacji:
Tożsamość aplikacji musi być członkiem ról, które zezwalają na następujące akcje warstwy danych w repozytorium kluczy:
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/verify/action
Najprostszym sposobem udzielenia aplikacji wymaganego uprawnienia jest dodanie jej tożsamości do roli użytkownika kryptograficznego usługi Key Vault. Możesz również utworzyć rolę niestandardową z wymaganymi uprawnieniami.
Użytkownik zarządzający kluczami dla funkcji Always Encrypted musi być członkiem ról, które zezwalają na następujące czynności w płaszczyźnie danych w skarbcu kluczy:
- Microsoft.KeyVault/vaults/keys/create/action
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/encrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/sign/action
- Microsoft.KeyVault/vaults/keys/verify/action
Najprostszym sposobem udzielenia użytkownikowi wymaganego uprawnienia jest dodanie użytkownika do roli Key Vault Crypto User. Możesz również utworzyć rolę niestandardową z wymaganymi uprawnieniami.
Jeśli przechowujesz klucze główne kolumn w magazynie kluczy i używasz zasad dostępu w celu autoryzacji:
- Tożsamość aplikacji wymaga następujących uprawnień zasad dostępu w magazynie kluczy: uzyskać, odpakuj kluczi sprawdzić.
- Użytkownik zarządzający kluczami w usłudze Always Encrypted potrzebuje następujących uprawnień zasad dostępu w magazynie kluczy: utworzyć, uzyskać, listować, podpisać, rozpakować klucz, opakować klucz, sprawdzić.
Aby uzyskać ogólne informacje na temat konfigurowania uwierzytelniania i autoryzacji dla magazynów kluczy, zobacz Autoryzowanie podmiotu zabezpieczeń w celu uzyskania dostępu do usługi Key Vault.
Zarządzane moduły HSM
Tożsamość aplikacji musi być członkiem ról, które zezwalają na następujące działania w zakresie płaszczyzny danych w zarządzanym urządzeniu HSM.
- Microsoft.KeyVault/managedHsm/keys/deszyfrować/akcja
- Microsoft.KeyVault/managedHsm/keys/read/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Firma Microsoft zaleca utworzenie roli niestandardowej zawierającej tylko powyższe uprawnienia.
Użytkownik zarządzający kluczami dla funkcji Always Encrypted musi być członkiem lub mieć role, które zezwalają na wykonanie następujących operacji na płaszczyźnie danych związanych z kluczem:
- Microsoft.KeyVault/managedHsm/keys/create/action
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/encrypt/action
- Microsoft.KeyVault/managedHsm/keys/read
- Microsoft.KeyVault/managedHsm/keys/sign/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Najprostszym sposobem udzielenia użytkownikowi powyższych uprawnień jest dodanie użytkownika do roli Użytkownika kryptograficznego zarządzanego modułu HSM. Możesz również utworzyć rolę niestandardową z wymaganymi uprawnieniami.
Aby uzyskać więcej informacji na temat kontroli dostępu dla zarządzanych modułów HSM, zobacz:
Tworzenie kluczy głównych kolumn w sprzętowych modułach zabezpieczeń przy użyciu CNG
Klucz główny kolumny dla funkcji Always Encrypted może być przechowywany w magazynie kluczy, który implementuje interfejs API następnej generacji kryptografii (CNG). Zazwyczaj ten typ magazynu to sprzętowy moduł zabezpieczeń (HSM). Moduł HSM to urządzenie fizyczne, które chroni klucze cyfrowe i zarządza nimi oraz zapewnia przetwarzanie kryptograficzne. Moduły HSM tradycyjnie mają postać karty wtyczki lub urządzenia zewnętrznego, które dołącza się bezpośrednio do komputera (lokalnych modułów HSM) lub serwera sieciowego.
Aby moduł HSM był dostępny dla aplikacji na danej maszynie, musi być na niej zainstalowany i skonfigurowany dostawca magazynu kluczy (KSP), który implementuje CNG. Sterownik klienta Always Encrypted (dostawca magazynu kluczy głównych kolumn w sterowniku) używa dostawcy KSP do szyfrowania i odszyfrowywania kluczy szyfrowania kolumn, chroniony za pomocą klucza głównego kolumny przechowywanego w magazynie kluczy.
System Windows obejmuje dostawcę magazynu kluczy oprogramowania firmy Microsoft — programowy dostawca kluczy, którego można używać do celów testowych. Zobacz dostawcy przechowywania kluczy CNG.
Tworzenie głównych kluczy kolumn w magazynie kluczy przy użyciu CNG/KSP
Klucz główny kolumny powinien być kluczem asymetrycznym (parą kluczy publicznych/prywatnych) przy użyciu algorytmu RSA. Zalecana długość klucza to 2048 lub większa.
Korzystanie z narzędzi specyficznych dla modułu HSM
Zapoznaj się z dokumentacją modułu HSM.
Korzystanie z programu PowerShell
Interfejsy API platformy .NET umożliwiają tworzenie klucza w magazynie kluczy przy użyciu CNG w programie PowerShell.
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
Korzystanie z programu SQL Server Management Studio
Zobacz Konfiguruj klucze Always Encrypted za pomocą SQL Server Management Studio.
Udostępnianie kluczy CNG aplikacjom i użytkownikom
Zapoznaj się z dokumentacją HSM i KSP, aby dowiedzieć się, jak skonfigurować KSP na maszynie oraz jak udzielić aplikacjom i użytkownikom dostępu do HSM.
Tworzenie kluczy głównych kolumn w sprzętowych modułach zabezpieczeń przy użyciu interfejsu CAPI (Cryptographic API)
Klucz główny kolumny dla funkcji Always Encrypted może być przechowywany w magazynie kluczy obsługującym kryptografię za pomocą CAPI. Zazwyczaj taki magazyn jest sprzętowym modułem zabezpieczeń (HSM) — urządzeniem fizycznym, które chroni klucze cyfrowe i zarządza nimi oraz zapewnia przetwarzanie kryptograficzne. Moduły HSM tradycyjnie mają postać karty wtyczki lub urządzenia zewnętrznego, które dołącza się bezpośrednio do komputera (lokalnych modułów HSM) lub serwera sieciowego.
Aby udostępnić moduł HSM aplikacjom na danej maszynie, należy zainstalować i skonfigurować program Cryptography Service Provider (CSP), który implementuje interfejs CAPI. Sterownik klienta Always Encrypted (dostawca magazynu kluczy głównych kolumn w sterowniku) używa dostawcy CSP do szyfrowania i odszyfrowywania kluczy szyfrowania kolumn, chroniony za pomocą klucza głównego kolumny przechowywanego w magazynie kluczy.
Nota
CAPI to starszy, przestarzały interfejs API. Jeśli KSP jest dostępny dla twojego modułu HSM, należy go użyć zamiast CSP/CAPI.
Dostawca CSP musi obsługiwać algorytm RSA, który ma być używany z funkcją Always Encrypted.
System Windows obejmuje następujące dostawcy CSP oparte na oprogramowaniu (nieobsługiwalne przez moduł HSM), które obsługują usługę RSA i mogą być używane do celów testowych: Microsoft Enhanced RSA i AES Cryptographic Provider.
Tworzenie kluczy głównych kolumn w magazynie kluczy przy użyciu CAPI/CSP
Klucz główny kolumny powinien być kluczem asymetrycznym (parą kluczy publicznych/prywatnych) przy użyciu algorytmu RSA. Zalecana długość klucza to 2048 lub większa.
Korzystanie z narzędzi specyficznych dla modułu HSM
Zapoznaj się z dokumentacją modułu HSM.
Korzystanie z programu SQL Server Management Studio (SSMS)
Zobacz , jak udostępniać klucze Always Encrypted przy użyciu programu SQL Server Management Studio.
Udostępnianie kluczy CNG aplikacjom i użytkownikom
Aby dowiedzieć się, jak skonfigurować dostawcę CSP na maszynie oraz jak udzielić aplikacjom i użytkownikom dostępu do modułu HSM, konsultuj dokumentację dla swoich modułów HSM i dostawców CSP.
Następne kroki
- Aprowizuj klucze Always Encrypted przy użyciu programu SQL Server Management Studio
- Aprowizuj klucze Always Encrypted przy użyciu programu PowerShell