Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Den här artikeln innehåller stegen för att ange always encrypted-målkonfigurationen för databaskolumner med hjälp av cmdleten Set-SqlColumnEncryption (i modulen SqlServer PowerShell). Cmdleten Set-SqlColumnEncryption ändrar både schemat för måldatabasen och de data som lagras i de valda kolumnerna. Data som lagras i en kolumn kan krypteras, krypteras om eller dekrypteras, beroende på de angivna målkrypteringsinställningarna för kolumnerna och den aktuella krypteringskonfigurationen. Om du vill utlösa kryptografiska åtgärder på plats med hjälp av en enklav måste Set-SqlColumnEncryption använda en databasanslutning som skapats med hjälp av en anslutningssträng med attesteringsprotokollet och eventuellt nyckelorden Attesterings-URL.
Förutsättningar
Om du vill ange målkrypteringskonfigurationen måste du se till att:
- En enklavaktiverad kolumnkrypteringsnyckel är konfigurerad i databasen (om du håller på att kryptera eller omkryptera en kolumn). Mer information finns i Hantera nycklar för Always Encrypted med säkra enklaver.
- du är ansluten till databasen med Always Encrypted aktiverat och attesteringsegenskaperna som anges i anslutningssträngen.
- du kan komma åt kolumnhuvudnyckeln för varje kolumn som du vill kryptera, kryptera om eller dekryptera från datorn som kör PowerShell-cmdletarna.
- du använder SqlServer PowerShell-modul version 22.0.50 eller senare. För onlinekryptering på plats använder du SqlServer PowerShell-modul version 22.3.0 eller senare.
Säkerhetshänsyn
Cmdleten Set-SqlColumnEncryption, som används för att konfigurera kryptering för databaskolumner, hanterar både Always Encrypted-nycklar och data som lagras i databaskolumner. Därför är det viktigt att du kör cmdleten på en säker dator. Om databasen finns i SQL Server kör du cmdleten från en annan dator än den dator som är värd för SQL Server-instansen. Eftersom det primära målet med Always Encrypted är att säkerställa att krypterade känsliga data är säkra även om databassystemet komprometteras kan körning av ett PowerShell-skript som bearbetar nycklar och/eller känsliga data på SQL Server-datorn minska eller motverka fördelarna med funktionen.
Uppgift | Artikel | Åtkomst till klartextnycklar/nyckelarkiv | Åtkomst till databasen |
---|---|---|---|
Steg 1. Starta en PowerShell-miljö och importera SqlServer-modulen. | Importera SqlServer-modulen | Nej | Nej |
Steg 2. Ansluta till servern och databasen | Ansluta till en databas | Nej | Ja |
Steg 3. Autentisera mot Azure om din kolumnmästar-nyckel, som skyddar kolumnkrypteringsnyckeln och som behöver roteras, lagras i Azure Key Vault. | Connect-AzAccount | Ja | Nej |
Steg 4. Hämta en åtkomsttoken för Azure Key Vaults. | Get-AzAccessToken | Nej | Nej |
Steg 5. Skapa en matris med SqlColumnEncryptionSettings-objekt – en för varje databaskolumn som du vill kryptera, kryptera om eller dekryptera. SqlColumnMasterKeySettings är ett objekt som finns i minnet (i PowerShell). Den anger målkrypteringsschemat för en kolumn. | New-SqlColumnEncryptionSettings | Nej | Nej |
Steg 5. Ange önskad krypteringskonfiguration, som anges i matrisen med SqlColumnMasterKeySettings-objekt, som du skapade i föregående steg. En kolumn krypteras, krypteras om eller dekrypteras, beroende på de angivna målinställningarna och kolumnens aktuella krypteringskonfiguration. |
Set-SqlColumnEncryption Obs! Det här steget kan ta lång tid. Dina program kommer inte att kunna komma åt tabellerna via hela åtgärden eller en del av den, beroende på vilken metod (online eller offline) du väljer. |
Ja | Ja |
Kryptera kolumner med hjälp av VBS-enklaver
Exemplet nedan visar hur du ställer in målkrypteringskonfigurationen för ett par kolumner. Om någon av kolumnerna inte redan är krypterade krypteras den. Om en kolumn redan är krypterad med en annan nyckel och/eller en annan krypteringstyp dekrypteras den och krypteras sedan igen med den angivna målnyckeln/typen. VBS-enklaver stöder för närvarande inte attestering. Parametern EnclaveAttestationProtocol ska anges till Ingen och EnclaveAttestationUrl krävs inte.
# Import modules
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
#Connect to Azure
Connect-AzAccount
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Connect to your database.
$serverName = "<servername>.database.windows.net"
$databaseName = "<DatabaseName>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Encrypt the selected columns (or re-encrypt, if they are already encrypted using keys/encrypt types, different than the specified keys/types.
$ces = @()
$ces += New-SqlColumnEncryptionSettings -ColumnName "dbo.Employees.SSN" -EncryptionType "Randomized" -EncryptionKey "CEK"
$ces += New-SqlColumnEncryptionSettings -ColumnName "dbo.Employees.Salary" -EncryptionType "Randomized" -EncryptionKey "CEK"
Set-SqlColumnEncryption -InputObject $database -ColumnEncryptionSettings $ces -LogFileDirectory . -EnclaveAttestationProtocol "None" -KeyVaultAccessToken $keyVaultAccessToken
Dekryptera kolumner – exempel
I följande exempel visas hur du dekrypterar alla kolumner som för närvarande är krypterade i en databas.
# Import modules
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
#Connect to Azure
Connect-AzAccount
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# 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
# Find all encrypted columns, and create a SqlColumnEncryptionSetting object for each column.
$ces = @()
$tables = $database.Tables
for($i=0; $i -lt $tables.Count; $i++){
$columns = $tables[$i].Columns
for($j=0; $j -lt $columns.Count; $j++) {
if($columns[$j].isEncrypted) {
$threeColPartName = $tables[$i].Schema + "." + $tables[$i].Name + "." + $columns[$j].Name
$ces += New-SqlColumnEncryptionSettings -ColumnName $threeColPartName -EncryptionType "Plaintext"
}
}
}
# Decrypt all columns.
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces -InputObject $database -LogFileDirectory . -EnclaveAttestationProtocol "None" -KeyVaultAccessToken $keyVaultAccessToken
Kryptera kolumner med SGX-enklaver
Exemplet nedan visar hur du ställer in målkrypteringskonfigurationen för ett par kolumner. Om någon av kolumnerna inte redan är krypterade krypteras den. Om en kolumn redan är krypterad med en annan nyckel och/eller en annan krypteringstyp dekrypteras den och krypteras sedan igen med den angivna målnyckeln/typen. För att utlösa kryptografiska åtgärder på plats med hjälp av en enklav krävs parametrarna EnclaveAttestationProtocol och EnclaveAttestationUrl.
# Import modules
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
#Connect to Azure
Connect-AzAccount
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Connect to your database.
$serverName = "<servername>.database.windows.net"
$databaseName = "<DatabaseName>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Encrypt the selected columns (or re-encrypt, if they are already encrypted using keys/encrypt types, different than the specified keys/types.
$ces = @()
$ces += New-SqlColumnEncryptionSettings -ColumnName "dbo.Employees.SSN" -EncryptionType "Randomized" -EncryptionKey "CEK"
$ces += New-SqlColumnEncryptionSettings -ColumnName "dbo.Employees.Salary" -EncryptionType "Randomized" -EncryptionKey "CEK"
Set-SqlColumnEncryption -InputObject $database -ColumnEncryptionSettings $ces -LogFileDirectory . -EnclaveAttestationProtocol "AAS" -EnclaveAttestationURL "https://<attestationURL>" -KeyVaultAccessToken $keyVaultAccessToken
Dekryptera kolumner – exempel
I följande exempel visas hur du dekrypterar alla kolumner som för närvarande är krypterade i en databas.
# Import modules
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
#Connect to Azure
Connect-AzAccount
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# 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
# Find all encrypted columns, and create a SqlColumnEncryptionSetting object for each column.
$ces = @()
$tables = $database.Tables
for($i=0; $i -lt $tables.Count; $i++){
$columns = $tables[$i].Columns
for($j=0; $j -lt $columns.Count; $j++) {
if($columns[$j].isEncrypted) {
$threeColPartName = $tables[$i].Schema + "." + $tables[$i].Name + "." + $columns[$j].Name
$ces += New-SqlColumnEncryptionSettings -ColumnName $threeColPartName -EncryptionType "Plaintext"
}
}
}
# Decrypt all columns.
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces -InputObject $database -LogFileDirectory . -EnclaveAttestationProtocol "AAS" -EnclaveAttestationURL "https://<attestationURL>" -KeyVaultAccessToken $keyVaultAccessToken