Udostępnij za pomocą


CREATE COLUMN MASTER KEY (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL DatabaseAzure SQL Managed Instance

Tworzy obiekt metadanych klucza głównego kolumny w bazie danych. Wpis metadanych klucza głównego kolumny reprezentuje klucz przechowywany w zewnętrznym magazynie kluczy. Klucz chroni (szyfruje) klucze szyfrowania kolumn podczas korzystania z funkcji Always Encrypted lub Always Encrypted z bezpiecznymi enklawami. Wiele kluczy głównych kolumn umożliwia okresową rotację kluczy w celu zwiększenia bezpieczeństwa. Utwórz klucz główny kolumny w magazynie kluczy i powiązanym z nim obiekt metadanych w bazie danych przy użyciu Eksploratora obiektów w programie SQL Server Management Studio lub programie PowerShell. Aby uzyskać szczegółowe informacje, zobacz Omówienie zarządzania kluczami dla funkcji Always Encrypted.

Transact-SQL konwencje składni

Ważne

Tworzenie kluczy z obsługą enklawy (z ENCLAVE_COMPUTATIONS) wymaga funkcji Always Encrypted z bezpiecznymi enklawami.

Składnia

CREATE COLUMN MASTER KEY key_name   
    WITH (  
        KEY_STORE_PROVIDER_NAME = 'key_store_provider_name',  
        KEY_PATH = 'key_path'   
        [,ENCLAVE_COMPUTATIONS (SIGNATURE = signature)]
         )   
[;]  

Arguments

key_name
Nazwa klucza głównego kolumny w bazie danych.

key_store_provider_name
Określa nazwę dostawcy magazynu kluczy. Dostawca magazynu kluczy to składnik oprogramowania po stronie klienta, który zawiera magazyn kluczy zawierający klucz główny kolumny.

Sterownik klienta z włączoną funkcją Always Encrypted:

  • Używa nazwy dostawcy magazynu kluczy
  • Wyszukuje dostawcę magazynu kluczy w rejestrze sterowników dostawców magazynu kluczy

Następnie sterownik używa dostawcy do odszyfrowania kluczy szyfrowania kolumny. Klucze szyfrowania kolumn są chronione za pomocą klucza głównego kolumny. Klucz główny kolumny jest przechowywany w bazowym magazynie kluczy. Wartość zwykłego tekstu klucza szyfrowania kolumny jest następnie używana do szyfrowania parametrów zapytania odpowiadających zaszyfrowanym kolumnom bazy danych. Lub klucz szyfrowania kolumny odszyfrowuje wyniki zapytania z zaszyfrowanych kolumn.

Biblioteki sterowników klienta z obsługą funkcji Always Encrypted obejmują dostawców magazynu kluczy dla popularnych magazynów kluczy.

Zestaw dostępnych dostawców zależy od typu i wersji sterownika klienta. Zapoznaj się z dokumentacją funkcji Always Encrypted dla konkretnych sterowników: tworzenie aplikacji przy użyciu funkcji Always Encrypted.

W poniższej tabeli przedstawiono nazwy dostawców systemów:

Nazwa dostawcy magazynu kluczy Podstawowy magazyn kluczy
"MSSQL_CERTIFICATE_STORE" Magazyn certyfikatów systemu Windows
"MSSQL_CSP_PROVIDER" Magazyn, taki jak sprzętowy moduł zabezpieczeń (HSM), który obsługuje interfejs Microsoft CryptoAPI.
"MSSQL_CNG_STORE" Magazyn, taki jak sprzętowy moduł zabezpieczeń (HSM), który obsługuje interfejs API kryptografii: Następna generacja.
"AZURE_KEY_VAULT" Zobacz Wprowadzenie do usługi Azure Key Vault
"MSSQL_JAVA_KEYSTORE" Magazyn kluczy Java.}

W sterowniku klienta z włączoną funkcją Always Encrypted można skonfigurować niestandardowego dostawcę magazynu kluczy, który przechowuje klucze główne kolumn, dla których nie ma wbudowanego dostawcy magazynu kluczy. Nazwy niestandardowych dostawców magazynu kluczy nie mogą zaczynać się od "MSSQL_", który jest prefiksem zarezerwowanym dla dostawców magazynu kluczy firmy Microsoft.

key_path
Ścieżka klucza w magazynie kluczy głównych kolumn. Ścieżka klucza musi być prawidłowa dla każdej aplikacji klienckiej oczekiwanej do szyfrowania lub odszyfrowywania danych. Dane są przechowywane w kolumnie, która jest (pośrednio) chroniona za pomocą przywoływnego klucza głównego kolumny. Aplikacja kliencka musi mieć dostęp do klucza. Format ścieżki klucza jest specyficzny dla dostawcy magazynu kluczy. Na poniższej liście opisano format ścieżek kluczy dla konkretnych dostawców magazynu kluczy systemowych firmy Microsoft.

  • Nazwa dostawcy: MSSQL_CERTIFICATE_STORE

    Format ścieżki klucza:CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    Where:

    CertificateStoreLocation
    Lokalizacja magazynu certyfikatów, która musi być bieżącym użytkownikiem lub komputerem lokalnym. Aby uzyskać więcej informacji, zobacz Local Machine and Current User Certificate Stores (Lokalne maszyny i magazyny certyfikatów bieżącego użytkownika).

    Magazyn certyfikatów
    Nazwa magazynu certyfikatów, na przykład "Moje".

    CertificateThumbprint
    Odcisk palca certyfikatu.

    Przykłady:

    N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94'  
    
    N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'  
    
  • Nazwa dostawcy: MSSQL_CSP_PROVIDER

    Format ścieżki klucza:ProviderName/KeyIdentifier

    Where:

    Nazwa dostawcy
    Nazwa dostawcy usług kryptograficznych (CSP), który implementuje interfejs CAPI dla magazynu kluczy głównych kolumn. Jeśli używasz modułu HSM jako magazynu kluczy, nazwa dostawcy musi być nazwą dostawcy CSP dostawcy modułu HSM. Dostawca musi być zainstalowany na komputerze klienckim.

    KeyIdentifier
    Identyfikator klucza, używany jako klucz główny kolumny, w magazynie kluczy.

    Przykłady:

    N'My HSM CSP Provider/AlwaysEncryptedKey1'  
    
  • Nazwa dostawcy: MSSQL_CNG_STORE

    Format ścieżki klucza:ProviderName/KeyIdentifier

    Where:

    Nazwa dostawcy
    Nazwa dostawcy magazynu kluczy (KSP), który implementuje interfejs API kryptografii: Następnej generacji (CNG) dla magazynu kluczy głównych kolumn. Jeśli używasz modułu HSM jako magazynu kluczy, nazwa dostawcy musi być nazwą dostawcy kluczy dostawcy modułu HSM. Dostawca musi być zainstalowany na komputerze klienckim.

    KeyIdentifier
    Identyfikator klucza, używany jako klucz główny kolumny, w magazynie kluczy.

    Przykłady:

    N'My HSM CNG Provider/AlwaysEncryptedKey1'  
    
  • Nazwa dostawcy: AZURE_KEY_STORE

    Format ścieżki klucza:KeyUrl

    Where:

    KeyUrl
    Adres URL klucza w usłudze Azure Key Vault

ENCLAVE_COMPUTATIONS
Określa, że klucz główny kolumny jest włączony enklawy. Wszystkie klucze szyfrowania kolumny, zaszyfrowane przy użyciu klucza głównego kolumny, można udostępnić enklawę bezpieczną po stronie serwera i użyć ich do obliczeń wewnątrz enklawy. Aby uzyskać więcej informacji, zobacz Always Encrypted with secure enlaves (Funkcja Always Encrypted z bezpiecznymi enklawami).

podpis
Literał binarny, który jest wynikiem cyfrowej ścieżki klucza podpisywania i ustawienia ENCLAVE_COMPUTATIONS z kluczem głównym kolumny. Podpis odzwierciedla, czy ENCLAVE_COMPUTATIONS jest określony, czy nie. Podpis chroni podpisane wartości przed zmianą przez nieautoryzowanych użytkowników. Sterownik klienta z włączoną funkcją Always Encrypted weryfikuje podpis i zwraca błąd do aplikacji, jeśli podpis jest nieprawidłowy. Podpis należy wygenerować przy użyciu narzędzi po stronie klienta. Aby uzyskać więcej informacji, zobacz Always Encrypted with secure enlaves (Funkcja Always Encrypted z bezpiecznymi enklawami).

Uwagi

Utwórz wpis metadanych klucza głównego kolumny przed utworzeniem wpisu metadanych klucza szyfrowania kolumny w bazie danych i przed zaszyfrowanie dowolnej kolumny w bazie danych przy użyciu funkcji Always Encrypted. Wpis klucza głównego kolumny w metadanych nie zawiera rzeczywistego klucza głównego kolumny. Klucz główny kolumny musi być przechowywany w zewnętrznym magazynie kluczy kolumn (poza programem SQL Server). Nazwa dostawcy magazynu kluczy i ścieżka klucza głównego kolumny w metadanych musi być prawidłowa dla aplikacji klienckiej. Aplikacja kliencka musi użyć klucza głównego kolumny do odszyfrowania klucza szyfrowania kolumny. Klucz szyfrowania kolumny jest szyfrowany przy użyciu klucza głównego kolumny. Aplikacja kliencka musi również wykonywać zapytania dotyczące zaszyfrowanych kolumn.

Zaleca się używanie narzędzi, takich jak SQL Server Management Studio (SSMS) lub PowerShell do zarządzania kluczami głównymi kolumn. Takie narzędzia generują podpisy (jeśli używasz funkcji Always Encrypted z bezpiecznymi enklawami) i automatycznie wystawiają CREATE COLUMN MASTER KEY instrukcje w celu utworzenia obiektów metadanych klucza szyfrowania kolumny. Zobacz Aprowizuj klucze Always Encrypted przy użyciu programu SQL Server Management Studio i Aprowizuj klucze Always Encrypted przy użyciu programu PowerShell.

Permissions

Wymaga uprawnienia ALTER ANY COLUMN MASTER KEY .

Przykłady

A. Tworzenie klucza głównego kolumny

Poniższy przykład tworzy wpis metadanych klucza głównego kolumny dla klucza głównego kolumny. Klucz główny kolumny jest przechowywany w magazynie certyfikatów dla aplikacji klienckich korzystających z dostawcy MSSQL_CERTIFICATE_STORE w celu uzyskania dostępu do klucza głównego kolumny:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  

Utwórz wpis metadanych klucza głównego kolumny dla klucza głównego kolumny. Aplikacje klienckie korzystające z dostawcy MSSQL_CNG_STORE uzyskują dostęp do klucza głównego kolumny:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CNG_STORE',    
    KEY_PATH = N'My HSM CNG Provider/AlwaysEncryptedKey'  
);  

Utwórz wpis metadanych klucza głównego kolumny dla klucza głównego kolumny. Klucz główny kolumny jest przechowywany w usłudze Azure Key Vault dla aplikacji klienckich korzystających z dostawcy AZURE_KEY_VAULT w celu uzyskania dostępu do klucza głównego kolumny.

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',  
    KEY_PATH = N'https://myvault.vault.azure.net:443/keys/  
        MyCMK/4c05f1a41b12488f9cba2ea964b6a700');  

Utwórz wpis metadanych klucza głównego kolumny dla klucza głównego kolumny. Klucz główny kolumny jest przechowywany w niestandardowym magazynie kluczy głównych kolumn:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = 'CUSTOM_KEY_STORE',    
    KEY_PATH = 'https://contoso.vault/sales_db_tce_key'  
);  

B. Tworzenie klucza głównego kolumny z obsługą enklawy

Poniższy przykład tworzy wpis metadanych klucza głównego kolumny dla klucza głównego kolumny z obsługą enklawy klucza głównego. Klucz główny kolumny z obsługą enklawy jest przechowywany w magazynie certyfikatów dla aplikacji klienckich korzystających z dostawcy MSSQL_CERTIFICATE_STORE w celu uzyskania dostępu do klucza głównego kolumny:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
     ENCLAVE_COMPUTATIONS (SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020542419990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
  );  

Utwórz wpis metadanych klucza głównego kolumny dla klucza głównego kolumny z obsługą enklawy. Klucz główny kolumny z obsługą enklawy jest przechowywany w usłudze Azure Key Vault dla aplikacji klienckich korzystających z dostawcy AZURE_KEY_VAULT w celu uzyskania dostępu do klucza głównego kolumny.

CREATE COLUMN MASTER KEY MyCMK
WITH (
	KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
	KEY_PATH = N'https://myvault.vault.azure.net:443/keys/MyCMK/4c05f1a41b12488f9cba2ea964b6a700',
	ENCLAVE_COMPUTATIONS(SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020582413990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
);

Zobacz też