Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Dit artikel bevat de stappen voor het instellen van de always encrypted-doelconfiguratie voor databasekolommen met behulp van de cmdlet Set-SqlColumnEncryption (in de SqlServer PowerShell-module). De Set-SqlColumnEncryption cmdlet wijzigt zowel het schema van de doeldatabase als de gegevens die zijn opgeslagen in de geselecteerde kolommen. De gegevens die in een kolom zijn opgeslagen, kunnen worden versleuteld, opnieuw versleuteld of ontsleuteld, afhankelijk van de opgegeven instellingen voor doelversleuteling voor de kolommen en de huidige versleutelingsconfiguratie. Als u cryptografische in-place bewerkingen wilt activeren met behulp van een enclave, moet Set-SqlColumnEncryption- een databaseverbinding gebruiken die is gemaakt met behulp van een verbindingsreeks met het Attestation-protocol en eventueel de trefwoorden voor de Attestation-URL.
Voorwaarden
Als u de configuratie van de doelversleuteling wilt instellen, moet u ervoor zorgen dat:
- een enclave-versleutelingssleutel voor kolommen wordt geconfigureerd in de database (als u een kolom versleutelt of opnieuw versleutelt). Zie Sleutels beheren voor Always Encrypted met beveiligde enclavesvoor meer informatie.
- u bent verbonden met de database met Always Encrypted ingeschakeld en de attestation-eigenschappen zoals opgegeven in de verbindingsreeks.
- u hebt toegang tot de hoofdsleutel van de kolom voor elke kolom die u wilt versleutelen, opnieuw versleutelen of ontsleutelen vanaf de computer waarop de PowerShell-cmdlets worden uitgevoerd.
- u sqlServer PowerShell-moduleversie 22.0.50 of hoger gebruikt. Voor in-place online versleuteling gebruikt u SqlServer PowerShell-module versie 22.3.0 of hoger.
Beveiligingsoverwegingen
De Set-SqlColumnEncryption cmdlet, gebruikt voor het configureren van versleuteling voor databasekolommen, verwerkt zowel Always Encrypted-sleutels als de gegevens die zijn opgeslagen in databasekolommen. Daarom is het belangrijk dat u de cmdlet uitvoert op een beveiligde computer. Als uw database zich in SQL Server bevindt, voert u de cmdlet uit vanaf een andere computer dan de computer die als host fungeert voor uw SQL Server-exemplaar. Omdat het primaire doel van Always Encrypted is om ervoor te zorgen dat versleutelde gevoelige gegevens veilig zijn, zelfs als het databasesysteem wordt aangetast, kan het uitvoeren van een PowerShell-script waarmee sleutels en/of gevoelige gegevens op de SQL Server-computer worden verwerkt, de voordelen van de functie verminderen of verslaan.
Taak | Artikel | Toegang tot platte-tekstsleutels/ sleutelopslag | Toegang tot database |
---|---|---|---|
Stap 1. Start een PowerShell-omgeving en importeer de SqlServer-module. | Importeer de SqlServer-module | Nee | Nee |
Stap 2. Verbinding maken met uw server en database | Verbinding maken met een database | Nee | Ja |
Stap 3. Verifiëren bij Azure, als uw kolomhoofdsleutel (het beveiligen van de kolomversleutelingssleutel, die moet worden geroteerd), wordt opgeslagen in Azure Key Vault | Connect-AzAccount | Ja | Nee |
Stap 4. Een toegangstoken verkrijgen voor Azure Key Vaults. | Get-AzAccessToken | Nee | Nee |
Stap 5. Maak een matrix van SqlColumnEncryptionSettings-objecten: één voor elke databasekolom, u wilt versleutelen, opnieuw versleutelen of ontsleutelen. SqlColumnMasterKeySettings is een object dat zich in het geheugen bevindt (in PowerShell). Hiermee geeft u het doelversleutelingsschema voor een kolom op. | New-SqlColumnEncryptionSettings | Nee | Nee |
Stap 5. Stel de gewenste versleutelingsconfiguratie in die is opgegeven in de matrix van SqlColumnMasterKeySettings-objecten die u in de vorige stap hebt gemaakt. Een kolom wordt versleuteld, opnieuw versleuteld of ontsleuteld, afhankelijk van de opgegeven doelinstellingen en de huidige versleutelingsconfiguratie van de kolom. |
Set-SqlColumnEncryption Opmerking: Deze stap kan lang duren. Uw toepassingen hebben geen toegang tot de tabellen via de hele bewerking of een deel ervan, afhankelijk van de aanpak (online versus offline), die u selecteert. |
Ja | Ja |
Kolommen versleutelen met VBS-enclaves
In het onderstaande voorbeeld ziet u hoe u de configuratie van de doelversleuteling instelt voor een aantal kolommen. Als een van beide kolommen nog niet is versleuteld, wordt deze versleuteld. Als een kolom al is versleuteld met een andere sleutel en/of een ander versleutelingstype, wordt deze ontsleuteld en vervolgens opnieuw versleuteld met de opgegeven doelsleutel/-type. VBS-enclaves bieden momenteel geen ondersteuning voor attestation. De parameter EnclaveAttestationProtocol moet worden ingesteld op Geen en de EnclaveAttestationUrl is niet vereist.
# 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
Kolommen ontsleutelen - voorbeeld
In het volgende voorbeeld ziet u hoe u alle kolommen ontsleutelt die momenteel zijn versleuteld in een database.
# 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
Kolommen versleutelen met behulp van SGX-enclaves
In het onderstaande voorbeeld ziet u hoe u de configuratie van de doelversleuteling instelt voor een aantal kolommen. Als een van beide kolommen nog niet is versleuteld, wordt deze versleuteld. Als een kolom al is versleuteld met een andere sleutel en/of een ander versleutelingstype, wordt deze ontsleuteld en vervolgens opnieuw versleuteld met de opgegeven doelsleutel/-type. Als u cryptografische in-place bewerkingen wilt activeren met behulp van een enclave, zijn de parameters EnclaveAttestationProtocol en EnclaveAttestationUrl vereist.
# 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
Kolommen ontsleutelen - voorbeeld
In het volgende voorbeeld ziet u hoe u alle kolommen ontsleutelt die momenteel zijn versleuteld in een database.
# 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
Volgende stappen
Zie ook
- Always Encrypted met beveiligde enclaves
- Sleutels beheren voor Always Encrypted met beveiligde enclaves
- Kolomversleuteling in-place configureren met Transact-SQL-
- Kolomversleuteling in-place configureren met een DAC-pakket
- Kolomversleuteling ter plaatse configureren met de wizard Always Encrypted in SSMS