Dela via


Tillhandahålla enklaveraktiverade nycklar

gäller för: SQL Server 2019 (15.x) och senare – Windows endast Azure SQL Database

Den här artikeln beskriver hur du etablerar enklaveraktiverade nycklar som stöder beräkningar i säkra enklaver på serversidan som används för Always Encrypted med säkra enklaver.

De allmänna riktlinjerna och processerna för hantering av Always Encrypted-nycklar tillämpas när du etablerar enklaveraktiverade nycklar. Den här artikeln handlar om information som är specifik för Always Encrypted med säkra enklaver.

Om du vill etablera en enklavaktiverad kolumnhuvudnyckel med SQL Server Management Studio eller PowerShell kontrollerar du att den nya nyckeln stöder enklaverberäkningar. Detta gör att verktyget (SSMS eller PowerShell) genererar den CREATE COLUMN MASTER KEY-instruktion som anger ENCLAVE_COMPUTATIONS i kolumnernas huvudnyckelmetadata i databasen. Mer information finns i CREATE COLUMN MASTER KEY (Transact-SQL).

Verktyget signerar också kolumnhuvudegenskaperna digitalt med kolumnhuvudnyckeln och lagrar signaturen i databasmetadata. Signaturen förhindrar skadlig manipulering av inställningen ENCLAVE_COMPUTATIONS. SQL-klientdrivrutinerna verifierar signaturerna innan du tillåter användning av enklaver. Detta ger säkerhetsadministratörer kontroll över vilka kolumndata som kan beräknas i enklaven.

ENCLAVE_COMPUTATIONS är oföränderlig, vilket innebär att du inte kan ändra den när du har definierat kolumnhuvudnyckeln i metadata. Om du vill aktivera enklaverberäkningar med hjälp av en kolumnkrypteringsnyckel, som en viss kolumnhuvudnyckel krypterar, måste du rotera kolumnhuvudnyckeln och ersätta den med en enklavaktiverad kolumnhuvudnyckel. Se Rotera nycklar med enklavaktivering.

Not

För närvarande stöder både SSMS och PowerShell enklavaktiverade kolumnhuvudnycklar som lagras i Azure Key Vault eller Windows Certificate Store. Maskinvarusäkerhetsmoduler (med CNG eller CAPI) stöds inte.

För att skapa en enklavaktiverad kolumnkrypteringsnyckel måste du se till att du väljer en enklavaktiverad kolumnhuvudnyckel för att kryptera den nya nyckeln.

Följande avsnitt innehåller mer information om hur du etablerar enklaveraktiverade nycklar med hjälp av SSMS och PowerShell.

Etablera enklaveraktiverade nycklar med SQL Server Management Studio

I SQL Server Management Studio kan du etablera:

  • En enklavaktiverad kolumnmästernyckel med hjälp av dialogrutan Ny kolumnmästernyckel.
  • En kolumnkrypteringsnyckel aktiverad för enklaver med hjälp av dialogrutan Ny kolumnkrypteringsnyckel.

Med guiden Always Encrypted kan du också skapa en enklavaktiverad kolumnhuvudnyckel och en enklavaktiverad kolumnkrypteringsnyckel.

Kontrollera att du har installerat den senaste allmänt tillgängliga (GA) versionen av SQL Server Management Studio (SSMS).

Etablera enklaveraktiverade kolumnhuvudnycklar med dialogrutan Ny kolumnhuvudnyckel

Om du vill etablera en enklavaktiverad kolumnhuvudnyckel följer du stegen i Etablera kolumnhuvudnycklar med dialogrutan Ny kolumnhuvudnyckel. Kontrollera att du väljer Tillåt enklaverberäkningar. Se skärmbilden nedan:

Tillåt enklaverberäkningar

Note

Kryssrutan Tillåt enklaverberäkningar visas endast om en säker enklav har konfigurerats för databasen. Om du använder SQL Server kan du läsa Konfigurera den säkra enklaven i SQL Server. Om du använder Azure SQL Database, se Aktivera Always Encrypted med säkra enklaver för din Azure SQL-databas.

Tips

Om du vill kontrollera om en kolumnhuvudnyckel är enklavaktiverad högerklickar du på den i Object Explorer och väljer Egenskaper. Om nyckeln är enklavaktiverad, visas Enklaverberäkningar: Tillåtna i fönstret som visar nyckelns egenskaper. Du kan också använda vyn sys.column_master_keys (Transact-SQL).

Etablera enklaveraktiverade kolumnkrypteringsnycklar med dialogrutan Krypteringsnyckel för ny kolumn

Om du vill etablera en enklavaktiverad kolumnkrypteringsnyckel följer du stegen i Etablera kolumnkrypteringsnycklar med dialogrutan Ny kolumnkrypteringsnyckel. När du väljer en kolumnhuvudnyckel kontrollerar du att den är enklavaktiverad.

Tips

Om du vill kontrollera om en kolumnkrypteringsnyckel är enklavaktiverad högerklickar du på den i Object Explorer och väljer Egenskaper. Om nyckeln är enklavaktiverad visas Enklaverberäkningar: Tillåtna i fönstret som visar nyckelns egenskaper.

Etablera enklaveraktiverade nycklar med PowerShell

Om du vill etablera enklaveraktiverade nycklar med PowerShell behöver du SqlServer PowerShell-modul version 22 eller senare.

I allmänhet gäller PowerShell-nyckeletableringsarbetsflöden (med och utan rollavgränsning) för Always Encrypted, som beskrivs i Etablera Always Encrypted Keys med PowerShell även för enklaveraktiverade nycklar. I det här avsnittet beskrivs information som är specifik för enklaveraktiverade nycklar.

SqlServer PowerShell-modulen utökar New-SqlCertificateStoreColumnMasterKeySettings och New-SqlAzureKeyVaultColumnMasterKeySettings cmdletar med parametern -AllowEnclaveComputations så att du kan ange en kolumnhuvudnyckel som är enklavaktiverad under etableringsprocessen. Antingen skapar cmdleten ett lokalt objekt som innehåller egenskaper för en kolumnhuvudnyckel (lagras i Azure Key Vault eller i Windows Certificate Store). Om det anges markerar egenskapen -AllowEnclaveComputations nyckeln som enklavaktiverad i det lokala objektet. Det gör också att cmdleten får åtkomst till den refererade kolumnhuvudnyckeln (i Azure Key Vault eller i Windows Certificate Store) för att signera nyckelns egenskaper digitalt. När du har skapat ett inställningsobjekt för en ny enklavaktiverad kolumnhuvudnyckel kan du använda det i ett efterföljande anrop av cmdleten New-SqlColumnMasterKey för att skapa ett metadataobjekt som beskriver den nya nyckeln i databasen.

Etablering av enklaveraktiverade kolumnkrypteringsnycklar skiljer sig inte från etablering av kolumnkrypteringsnycklar som inte är enklaveraktiverade. Du behöver bara se till att en kolumnhuvudnyckel som används för att kryptera den nya kolumnkrypteringsnyckeln är enklavaktiverad.

Note

SqlServer PowerShell-modulen stöder för närvarande inte etablering av enklaveraktiverade nycklar som lagras i maskinvarusäkerhetsmoduler (med CNG eller CAPI).

Exempel – etablera enklaveraktiverade nycklar med Hjälp av Windows Certificate Store

Exemplet nedan visar hur du etablerar enklavaktiverade nycklar och lagrar kolumnhuvudnyckeln i Windows Certificate Store. Skriptet baseras på exemplet i Windows Certificate Store utan rollavgränsning (exempel). Viktigt att notera är användningen av parametern -AllowEnclaveComputations i New-SqlCertificateStoreColumnMasterKeySettings cmdlet, vilket är den enda skillnaden mellan arbetsflödena i de två exemplen.

# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Create a SqlColumnMasterKeySettings object for your column master key
# using the -AllowEnclaveComputations parameter.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint -AllowEnclaveComputations

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName  -InputObject $database -ColumnMasterKey $cmkName

Exempel – etablera enklaveraktiverade nycklar med Hjälp av Azure Key Vault

Exemplet nedan visar hur du etablerar enklaveraktiverade nycklar och lagrar kolumnhuvudnyckeln i ett nyckelvalv i Azure Key Vault. Skriptet baseras på exemplet i Azure Key Vault utan rollavgränsning (exempel). Det är viktigt att notera två skillnader mellan arbetsflödet för enklaveraktiverade nycklar jämfört med de nycklar som inte är enklaveraktiverade.

  • I skriptet nedan använder New-SqlCertificateStoreColumnMasterKeySettings parametern -AllowEnclaveComputations för att aktivera enklavfunktioner för den nya masternyckeln för kolumnen.
  • Skriptet nedan använder cmdleten Get-AzAccessToken för att hämta en åtkomsttoken för nyckelvalv. Detta är nödvändigt eftersom New-SqlAzureKeyVaultColumnMasterKeySettings måste ha åtkomst till Azure Key Vault för att signera egenskaperna för kolumnhuvudnyckeln.
# Create a column master key in Azure Key Vault.
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr

# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token 

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID -AllowEnclaveComputations -KeyVaultAccessToken $keyVaultAccessToken

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken

Nästa steg

Se även