Dela via


SKAPA KOLUMNHUVUDNYCKEL (Transact-SQL)

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed Instance

Skapar ett kolumnhuvudnyckelmetadataobjekt i en databas. En kolumnhuvudnyckelmetadatapost representerar en nyckel som lagras i ett externt nyckelarkiv. Nyckeln skyddar (krypterar) kolumnkrypteringsnycklar när du använder Always Encrypted eller Always Encrypted med säkra enklaver. Med flera kolumnhuvudnycklar kan regelbunden nyckelrotation förbättra säkerheten. Skapa en kolumnhuvudnyckel i ett nyckelarkiv och dess relaterade metadataobjekt i databasen med hjälp av Object Explorer i SQL Server Management Studio eller PowerShell. Mer information finns i Översikt över nyckelhantering för Always Encrypted.

Transact-SQL syntaxkonventioner

Viktigt!

Att skapa enklaveraktiverade nycklar (med ENCLAVE_COMPUTATIONS) kräver Always Encrypted med säkra enklaver.

Syntax

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
Namnet på kolumnhuvudnyckeln i databasen.

key_store_provider_name
Anger namnet på en nyckellagringsprovider. En nyckellagerprovider är en programvarukomponent på klientsidan som innehåller ett nyckelarkiv som har kolumnhuvudnyckeln.

En klientdrivrutin som är aktiverad med Always Encrypted:

  • Använder ett providernamn för nyckelarkivet
  • Söker efter nyckellagringsprovidern i drivrutinsregistret för nyckellagringsleverantörer

Drivrutinen använder sedan providern för att dekryptera kolumnkrypteringsnycklar. Kolumnkrypteringsnycklarna skyddas av en kolumnhuvudnyckel. Kolumnhuvudnyckeln lagras i det underliggande nyckelarkivet. Ett klartextvärde för kolumnkrypteringsnyckeln används sedan för att kryptera frågeparametrar som motsvarar krypterade databaskolumner. Eller så dekrypterar kolumnkrypteringsnyckeln frågeresultat från krypterade kolumner.

Always Encrypted-aktiverade klientdrivrutinsbibliotek innehåller nyckellagringsprovidrar för populära nyckellager.

En uppsättning tillgängliga leverantörer beror på typen och versionen av klientdrivrutinen. Se Always Encrypted-dokumentationen för vissa drivrutiner: Utveckla program med Always Encrypted.

I följande tabell visas namnen på systemprovidrar:

Namn på nyckellagringsprovider Underliggande nyckelarkiv
"MSSQL_CERTIFICATE_STORE" Windows Certificate Store
"MSSQL_CSP_PROVIDER" Ett arkiv, till exempel en maskinvarusäkerhetsmodul (HSM), som stöder Microsoft CryptoAPI.
"MSSQL_CNG_STORE" Ett arkiv, till exempel en maskinvarusäkerhetsmodul (HSM), som stöder kryptografi-API: Nästa generation.
"AZURE_KEY_VAULT" Se Komma igång med Azure Key Vault
"MSSQL_JAVA_KEYSTORE" Java Key Store.}

I din Always Encrypted-aktiverade klientdrivrutin kan du konfigurera en anpassad nyckellagringsprovider som lagrar kolumnhuvudnycklar som det inte finns någon inbyggd nyckellagringsprovider för. Namnen på leverantörer av anpassade nyckelarkiv kan inte börja med "MSSQL_", vilket är ett prefix som är reserverat för Microsofts nyckellagringsleverantörer.

key_path
Sökvägen till nyckeln i kolumnhuvudnyckelarkivet. Nyckelsökvägen måste vara giltig för varje klientprogram som förväntas kryptera eller dekryptera data. Data lagras i en kolumn som (indirekt) skyddas av den refererade kolumnhuvudnyckeln. Klientprogrammet måste ha åtkomst till nyckeln. Formatet för nyckelsökvägen är specifikt för nyckellagringsprovidern. I följande lista beskrivs formatet för viktiga sökvägar för vissa Microsoft-systemnyckellagringsleverantörer.

  • Providernamn: MSSQL_CERTIFICATE_STORE

    Nyckelsökvägsformat:CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    Where:

    CertificateStoreLocation
    Plats för certifikatarkivet, som måste vara aktuell användare eller lokal dator. Mer information finns i Lokala dator- och aktuella användarcertifikatarkiv.

    CertificateStore
    Certifikatarkivets namn, till exempel "Min".

    CertificateThumbprint
    Certifikatets tumavtryck.

    Exempel:

    N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94'  
    
    N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'  
    
  • Providernamn: MSSQL_CSP_PROVIDER

    Nyckelsökvägsformat:ProviderName/KeyIdentifier

    Where:

    ProviderName
    Namnet på en kryptografitjänstleverantör (CSP), som implementerar CAPI, för kolumnhuvudnyckelarkivet. Om du använder en HSM som ett nyckelarkiv måste providernamnet vara namnet på CSP:en som HSM-leverantör tillhandahåller. Providern måste vara installerad på en klientdator.

    KeyIdentifier
    Identifierare för nyckeln, som används som en kolumnhuvudnyckel, i nyckelarkivet.

    Exempel:

    N'My HSM CSP Provider/AlwaysEncryptedKey1'  
    
  • Providernamn: MSSQL_CNG_STORE

    Nyckelsökvägsformat:ProviderName/KeyIdentifier

    Where:

    ProviderName
    Namnet på nyckellagringsprovidern (KSP), som implementerar API:et Cryptography: Next Generation (CNG) för kolumnhuvudnyckellagret. Om du använder en HSM som ett nyckelarkiv måste providernamnet vara namnet på den KSP som HSM-leverantören tillhandahåller. Providern måste vara installerad på en klientdator.

    KeyIdentifier
    Identifierare för nyckeln, som används som en kolumnhuvudnyckel, i nyckelarkivet.

    Exempel:

    N'My HSM CNG Provider/AlwaysEncryptedKey1'  
    
  • Providernamn: AZURE_KEY_STORE

    Nyckelsökvägsformat:KeyUrl

    Where:

    KeyUrl
    URL:en för nyckeln i Azure Key Vault

ENCLAVE_COMPUTATIONS
Anger att kolumnhuvudnyckeln är enklavaktiverad. Du kan dela alla kolumnkrypteringsnycklar, krypterade med kolumnhuvudnyckeln, med en säker enklav på serversidan och använda dem för beräkningar i enklaven. Mer information finns i Always Encrypted med säkra enklaver.

underskrift
En binär literal som är ett resultat av sökvägen för digital signeringsnyckel och inställningen ENCLAVE_COMPUTATIONS med kolumnhuvudnyckeln. Signaturen visar om ENCLAVE_COMPUTATIONS har angetts eller inte. Signaturen skyddar de signerade värdena från att ändras av obehöriga användare. En Always Encrypted-aktiverad klientdrivrutin verifierar signaturen och returnerar ett fel till programmet om signaturen är ogiltig. Signaturen måste genereras med hjälp av verktyg på klientsidan. Mer information finns i Always Encrypted med säkra enklaver.

Anmärkningar

Skapa en kolumnhuvudnyckelmetadatapost innan du skapar en kolumnkrypteringsnyckelmetadatapost i databasen och innan någon kolumn i databasen kan krypteras med Always Encrypted. En kolumnhuvudnyckelpost i metadata innehåller inte den faktiska kolumnhuvudnyckeln. Kolumnhuvudnyckeln måste lagras i ett externt kolumnnyckelarkiv (utanför SQL Server). Nyckellagringsproviderns namn och kolumnhuvudnyckelsökvägen i metadata måste vara giltiga för ett klientprogram. Klientprogrammet måste använda kolumnhuvudnyckeln för att dekryptera en kolumnkrypteringsnyckel. Kolumnkrypteringsnyckeln krypteras med kolumnhuvudnyckeln. Klientprogrammet måste också köra frågor mot krypterade kolumner.

Vi rekommenderar att du använder verktyg, till exempel SQL Server Management Studio (SSMS) eller PowerShell för att hantera kolumnhuvudnycklar. Sådana verktyg genererar signaturer (om du använder Always Encrypted med säkra enklaver) och utfärdar CREATE COLUMN MASTER KEY automatiskt instruktioner för att skapa metadataobjekt för kolumnkrypteringsnycklar. Se Etablera Always Encrypted-nycklar med SQL Server Management Studio och Etablera Always Encrypted-nycklar med PowerShell.

Permissions

Kräver behörigheten ALTER ANY COLUMN MASTER KEY (ÄNDRA KOLUMNHUVUDNYCKEL ).

Examples

A. Skapa en kolumnhuvudnyckel

I följande exempel skapas en kolumnhuvudnyckelmetadatapost för en kolumnhuvudnyckel. Kolumnhuvudnyckeln lagras i certifikatarkivet för klientprogram som använder MSSQL_CERTIFICATE_STORE-providern för att komma åt kolumnhuvudnyckeln:

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

Skapa en kolumnhuvudnyckelmetadatapost för en kolumnhuvudnyckel. Klientprogram, som använder MSSQL_CNG_STORE-providern, får åtkomst till kolumnhuvudnyckeln:

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

Skapa en kolumnhuvudnyckelmetadatapost för en kolumnhuvudnyckel. Kolumnhuvudnyckeln lagras i Azure Key Vault för klientprogram som använder AZURE_KEY_VAULT-providern för att få åtkomst till kolumnhuvudnyckeln.

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');  

Skapa en kolumnhuvudnyckelmetadatapost för en kolumnhuvudnyckel. Huvudnyckeln för kolumnen lagras i ett anpassat huvudnyckelarkiv för kolumner:

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

B. Skapa en enklavaktiverad kolumnhuvudnyckel

I följande exempel skapas en kolumnhuvudnyckelmetadatapost för en enklavaktiverad kolumnhuvudnyckel. Den enklavaktiverade kolumnhuvudnyckeln lagras i ett certifikatarkiv för klientprogram som använder MSSQL_CERTIFICATE_STORE-providern för att komma åt kolumnhuvudnyckeln:

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

Skapa en kolumnhuvudnyckelmetadatapost för en enklavaktiverad kolumnhuvudnyckel. Den enklavaktiverade kolumnhuvudnyckeln lagras i Azure Key Vault för klientprogram som använder AZURE_KEY_VAULT-providern för att få åtkomst till kolumnhuvudnyckeln.

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)
);

Se även