Delen via


HOOFDSLEUTEL VOOR KOLOM MAKEN (Transact-SQL)

Van toepassing op: SQL Server 2016 (13.x) en latere versies van Azure SQL DatabaseAzure SQL Managed Instance

Hiermee maakt u een kolomhoofdsleutelmetagegevensobject in een database. Een kolomhoofdsleutelmetagegevensvermelding vertegenwoordigt een sleutel die is opgeslagen in een extern sleutelarchief. De sleutel beveiligt (versleutelt) kolomversleutelingssleutels wanneer u Always Encrypted of Always Encrypted gebruikt met beveiligde enclaves. Met meerdere hoofdsleutels voor kolommen kunt u de beveiliging verbeteren door periodieke sleutelrotatie. Maak een kolomhoofdsleutel in een sleutelarchief en het bijbehorende metagegevensobject in de database met behulp van objectverkenner in SQL Server Management Studio of PowerShell. Zie Overzicht van Sleutelbeheer voor Always Encrypted voor meer informatie.

Transact-SQL syntaxis-conventies

Belangrijk

Voor het maken van enclave-sleutels (met ENCLAVE_COMPUTATIONS) is Always Encrypted met beveiligde enclaves vereist.

Syntaxis

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
De naam van de kolomhoofdsleutel in de database.

key_store_provider_name
Hiermee geeft u de naam van een sleutelarchiefprovider. Een sleutelarchiefprovider is een softwareonderdeel aan de clientzijde dat een sleutelarchief bevat met de hoofdsleutel van de kolom.

Een clientstuurprogramma, ingeschakeld met Always Encrypted:

  • Gebruikt de naam van de provider van een sleutelarchief
  • Zoekt naar de sleutelarchiefprovider in het register van sleutelarchiefproviders van het stuurprogramma

Het stuurprogramma gebruikt vervolgens de provider om kolomversleutelingssleutels te ontsleutelen. De kolomversleutelingssleutels worden beveiligd door een kolomhoofdsleutel. De hoofdsleutel van de kolom wordt opgeslagen in het onderliggende sleutelarchief. Vervolgens wordt een waarde voor tekst zonder opmaak van de kolomversleutelingssleutel gebruikt om queryparameters te versleutelen die overeenkomen met versleutelde databasekolommen. Of de kolomversleutelingssleutel ontsleutelt queryresultaten van versleutelde kolommen.

Always Encrypted-clientstuurprogrammabibliotheken bevatten sleutelarchiefproviders voor populaire sleutelarchieven.

Een set beschikbare providers is afhankelijk van het type en de versie van het clientstuurprogramma. Zie de Always Encrypted-documentatie voor bepaalde stuurprogramma's: Toepassingen ontwikkelen met Always Encrypted.

In de volgende tabel ziet u de namen van systeembeheerders:

Naam van sleutelarchiefprovider Onderliggend sleutelarchief
'MSSQL_CERTIFICATE_STORE' Windows-certificaatarchief
'MSSQL_CSP_PROVIDER' Een winkel, zoals een HSM (Hardware Security Module), die Microsoft CryptoAPI ondersteunt.
'MSSQL_CNG_STORE' Een winkel, zoals een HSM (Hardware Security Module), die cryptografie-API ondersteunt: Volgende generatie.
'AZURE_KEY_VAULT' Zie Aan de slag met Azure Key Vault
'MSSQL_JAVA_KEYSTORE' Java Key Store.}

In het clientstuurprogramma met Always Encrypted-functionaliteit kunt u een aangepaste sleutelarchiefprovider instellen waarin kolomhoofdsleutels worden opgeslagen waarvoor geen ingebouwde sleutelarchiefprovider is. De namen van aangepaste sleutelarchiefproviders kunnen niet beginnen met 'MSSQL_'. Dit is een voorvoegsel dat is gereserveerd voor Microsoft-sleutelarchiefproviders.

key_path
Het pad van de sleutel in het hoofdsleutelarchief van de kolom. Het sleutelpad moet geldig zijn voor elke clienttoepassing die naar verwachting gegevens versleutelt of ontsleutelt. De gegevens worden opgeslagen in een kolom die (indirect) wordt beveiligd door de hoofdsleutel van de kolom waarnaar wordt verwezen. De clienttoepassing moet toegang hebben tot de sleutel. De indeling van het sleutelpad is specifiek voor de provider van het sleutelarchief. In de volgende lijst wordt de indeling van sleutelpaden voor bepaalde Providers van het Microsoft-systeemsleutelarchief beschreven.

  • Providernaam: MSSQL_CERTIFICATE_STORE

    Indeling van sleutelpad:CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    Where:

    CertificateStoreLocation
    Locatie van certificaatarchief, die huidige gebruiker of lokale computer moet zijn. Zie Lokale machine en huidige gebruikerscertificaatarchieven voor meer informatie.

    CertificateStore
    Naam van certificaatarchief, bijvoorbeeld 'Mijn'.

    CertificateThumbprint
    Vingerafdruk van certificaat.

    Voorbeelden:

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

    Indeling van sleutelpad:ProviderName/KeyIdentifier

    Where:

    ProviderName
    De naam van een Cryptografieserviceprovider (CSP), waarmee CAPI wordt geïmplementeerd voor het hoofdsleutelarchief van de kolom. Als u een HSM als sleutelarchief gebruikt, moet de providernaam de naam zijn van de CSP die uw HSM-leverancier levert. De provider moet worden geïnstalleerd op een clientcomputer.

    KeyIdentifier
    Id van de sleutel, die wordt gebruikt als een kolomhoofdsleutel, in het sleutelarchief.

    Voorbeelden:

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

    Indeling van sleutelpad:ProviderName/KeyIdentifier

    Where:

    ProviderName
    Naam van de Key Storage Provider (KSP), waarmee de Cryptografie: Next Generation (CNG) API wordt geïmplementeerd voor het hoofdsleutelarchief van de kolom. Als u een HSM als sleutelarchief gebruikt, moet de providernaam de naam zijn van de KSP die uw HSM-leverancier levert. De provider moet worden geïnstalleerd op een clientcomputer.

    KeyIdentifier
    Id van de sleutel, die wordt gebruikt als een kolomhoofdsleutel, in het sleutelarchief.

    Voorbeelden:

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

    Indeling van sleutelpad:KeyUrl

    Where:

    KeyUrl
    De URL van de sleutel in Azure Key Vault

ENCLAVE_COMPUTATIONS
Hiermee geeft u op dat de kolomhoofdsleutel enclave is ingeschakeld. U kunt alle kolomversleutelingssleutels delen, versleuteld met de kolomhoofdsleutel, met een beveiligde enclave aan de serverzijde en deze gebruiken voor berekeningen in de enclave. Zie Always Encrypted met beveiligde enclaves voor meer informatie.

handtekening
Een binaire letterlijke waarde die het resultaat is van het digitale ondertekeningssleutelpad en de ENCLAVE_COMPUTATIONS instelling met de kolomhoofdsleutel. De handtekening geeft aan of ENCLAVE_COMPUTATIONS is opgegeven of niet. De handtekening beschermt de ondertekende waarden tegen het wijzigen door onbevoegde gebruikers. Een clientstuurprogramma met Always Encrypted controleert de handtekening en retourneert een fout in de toepassing als de handtekening ongeldig is. De handtekening moet worden gegenereerd met behulp van hulpprogramma's aan de clientzijde. Zie Always Encrypted met beveiligde enclaves voor meer informatie.

Opmerkingen

Maak een metagegevensvermelding voor de kolomhoofdsleutel voordat u een metagegevensvermelding voor kolomversleutelingssleutels maakt in de database en voordat een kolom in de database kan worden versleuteld met Always Encrypted. Een kolomhoofdsleutelvermelding in de metagegevens bevat niet de werkelijke hoofdsleutel van de kolom. De hoofdsleutel van de kolom moet worden opgeslagen in een extern sleutelarchief voor kolommen (buiten SQL Server). De naam van de sleutelarchiefprovider en het pad naar de kolomhoofdsleutel in de metagegevens moeten geldig zijn voor een clienttoepassing. De clienttoepassing moet de hoofdsleutel van de kolom gebruiken om een kolomversleutelingssleutel te ontsleutelen. De kolomversleutelingssleutel wordt versleuteld met de kolomhoofdsleutel. De clienttoepassing moet ook query's uitvoeren op versleutelde kolommen.

Het wordt aanbevolen om hulpprogramma's te gebruiken, zoals SQL Server Management Studio (SSMS) of PowerShell voor het beheren van kolomhoofdsleutels. Dergelijke hulpprogramma's genereren handtekeningen (als u Always Encrypted gebruikt met beveiligde enclaves) en geven CREATE COLUMN MASTER KEY automatisch instructies uit om metagegevensobjecten voor kolomversleutelingssleutels te maken. Zie Always Encrypted-sleutels inrichten met BEHULP van SQL Server Management Studio en Always Encrypted-sleutels inrichten met behulp van PowerShell.

Permissions

Hiervoor is de machtiging ALTER ANY COLUMN MASTER KEY vereist.

Voorbeelden

Eén. Een kolomhoofdsleutel maken

In het volgende voorbeeld wordt een metagegevensvermelding voor de kolomhoofdsleutel gemaakt voor een kolomhoofdsleutel. De kolomhoofdsleutel wordt opgeslagen in het certificaatarchief voor clienttoepassingen die gebruikmaken van de MSSQL_CERTIFICATE_STORE-provider voor toegang tot de kolomhoofdsleutel:

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

Maak een metagegevensvermelding voor de kolomhoofdsleutel voor een kolomhoofdsleutel. Clienttoepassingen, die gebruikmaken van de MSSQL_CNG_STORE-provider, hebben toegang tot de hoofdsleutel van de kolom:

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

Maak een metagegevensvermelding voor de kolomhoofdsleutel voor een kolomhoofdsleutel. De kolomhoofdsleutel wordt opgeslagen in Azure Key Vault, voor clienttoepassingen die gebruikmaken van de AZURE_KEY_VAULT-provider, voor toegang tot de kolomhoofdsleutel.

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

Maak een metagegevensvermelding voor de kolomhoofdsleutel voor een kolomhoofdsleutel. De hoofdsleutel van de kolom wordt opgeslagen in een aangepast sleutelarchief voor kolommen:

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

B. Een kolomhoofdsleutel met enclave maken

In het volgende voorbeeld wordt een metagegevensvermelding voor de kolomhoofdsleutel voor een kolomhoofdsleutel gemaakt voor een kolomhoofdsleutel waarvoor een enclave is ingeschakeld. De kolomhoofdsleutel met enclave-functionaliteit wordt opgeslagen in een certificaatarchief voor clienttoepassingen die gebruikmaken van de MSSQL_CERTIFICATE_STORE-provider voor toegang tot de kolomhoofdsleutel:

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

Maak een metagegevensvermelding voor de kolomhoofdsleutel voor een kolomhoofdsleutel met enclave-functionaliteit. De kolomhoofdsleutel met enclave-functionaliteit wordt opgeslagen in Azure Key Vault, voor clienttoepassingen die gebruikmaken van de AZURE_KEY_VAULT-provider, voor toegang tot de hoofdsleutel van de kolom.

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

Zie ook