Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Tento článek obsahuje postup nastavení cílové konfigurace Always Encrypted pro sloupce databáze pomocí rutiny Set-SqlColumnEncryption (v modulu SqlServer PowerShellu). Cmdlet Set-SqlColumnEncryption upraví jak schéma cílové databáze, tak i data uložená ve vybraných sloupcích. Data uložená ve sloupci je možné zašifrovat, znovu zašifrovat nebo dešifrovat v závislosti na zadaném nastavení šifrování pro sloupce a aktuální konfiguraci šifrování. Pokud chcete aktivovat kryptografické operace na místě pomocí enklávy, Set-SqlColumnEncryption musí používat připojení k databázi vytvořené pomocí připojovacího řetězce s Attestation Protocol a volitelně i klíčová slova URL pro ověření identity.
Požadavky
Pokud chcete nastavit cílovou konfiguraci šifrování, musíte se ujistit, že:
- Šifrovací klíč sloupce s povolením enklávy je nakonfigurovaný v databázi (pokud šifrujete nebo znovu šifrujete sloupec). Podrobnosti najdete v tématu Správa klíčů pro Always Encrypted se zabezpečenou enklávou.
- jste připojení k databázi s povolenou funkcí Always Encrypted a vlastnostmi ověření identity zadanými v připojovacím řetězci.
- Ke hlavnímu klíči sloupce pro každý sloupec, který chcete šifrovat, znovu zašifrovat nebo dešifrovat, můžete přistupovat z počítače, na kterém běží rutiny PowerShellu.
- používáte modul SqlServer PowerShell verze 22.0.50 nebo novější. Pro místní online šifrování použijte modul SqlServer PowerShell verze 22.3.0 nebo novější.
Důležité informace o zabezpečení
Rutina Set-SqlColumnEncryption, která slouží ke konfiguraci šifrování sloupců databáze, zpracovává klíče Always Encrypted i data uložená ve sloupcích databáze. Proto je klíčové spustit cmdlet na zabezpečeném počítači. Pokud je vaše databáze v SQL Serveru, spusťte rutinu z jiného počítače, než je počítač hostující instanci SQL Serveru. Vzhledem k tomu, že primárním cílem funkce Always Encrypted je zajistit, aby šifrovaná citlivá data byla v bezpečí i v případě ohrožení databázového systému, spuštění skriptu PowerShellu, který zpracovává klíče nebo citlivá data na počítači s SQL Serverem, může snížit nebo porazit výhody této funkce.
Úkol | Článek | Přístup ke klíčům nebo úložišti klíčů ve formátu prostého textu | Přístup k databázi |
---|---|---|---|
Krok 1. Spusťte prostředí PowerShell a naimportujte modul SqlServer. | Import modulu SqlServer | Ne | Ne |
Krok 2. Připojení k serveru a databázi | Připojení k databázi | Ne | Ano |
Krok 3. Ověřte se v Azure, jestli je váš hlavní klíč sloupce (chránící šifrovací klíč sloupce, který se má rotovat) uložen v Azure Key Vault. | Connect-AzAccount | Ano | Ne |
Krok 4. Získejte přístupový token pro služby Azure Key Vault. | Get-AzAccessToken | Ne | Ne |
Krok 5. Vytvořte pole objektů SqlColumnEncryptionSettings – jeden pro každý sloupec databáze, který chcete zašifrovat, znovu zašifrovat nebo dešifrovat. SqlColumnMasterKeySettings je objekt, který existuje v paměti (v PowerShellu). Určuje cílové schéma šifrování pro sloupec. | New-SqlColumnEncryptionSettings | Ne | Ne |
Krok 5. Nastavte požadovanou konfiguraci šifrování zadanou v poli objektů SqlColumnMasterKeySettings, které jste vytvořili v předchozím kroku. Sloupec se zašifruje, znovu zašifruje nebo dešifruje v závislosti na zadaných cílových nastaveních a aktuální konfiguraci šifrování sloupce. |
Set-SqlColumnEncryption Poznámka: Tento krok může trvat dlouhou dobu. Vaše aplikace nebudou mít přístup k tabulkám prostřednictvím celé operace nebo jeho části v závislosti na přístupu (online nebo offline), který vyberete. |
Ano | Ano |
Šifrování sloupců pomocí enkláv VBS
Následující příklad ukazuje nastavení konfigurace cílového šifrování pro několik sloupců. Pokud některý ze sloupců ještě není zašifrovaný, zašifruje se. Pokud je některý sloupec už šifrovaný pomocí jiného klíče nebo jiného typu šifrování, dešifruje se a pak se znovu zašifruje zadaným cílovým klíčem nebo typem. Enklávy VBS v současné době nepodporují ověření identity. Parametr EnclaveAttestationProtocol by měl být nastavený na None a enclaveAttestationUrl není povinný.
# 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
Dešifrování sloupců – příklad
Následující příklad ukazuje, jak dešifrovat všechny sloupce, které jsou aktuálně šifrované v databázi.
# 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
Šifrování sloupců pomocí enkláv SGX
Následující příklad ukazuje nastavení konfigurace cílového šifrování pro několik sloupců. Pokud některý ze sloupců ještě není zašifrovaný, zašifruje se. Pokud je některý sloupec už šifrovaný pomocí jiného klíče nebo jiného typu šifrování, dešifruje se a pak se znovu zašifruje zadaným cílovým klíčem nebo typem. K aktivaci místních kryptografických operací pomocí enklávy se vyžadují parametry EnclaveAttestationProtocol a 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
Dešifrování sloupců – příklad
Následující příklad ukazuje, jak dešifrovat všechny sloupce, které jsou aktuálně šifrované v databázi.
# 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
Další kroky
Viz také
- Always Encrypted se zabezpečenými enklávami
- Správa klíčů pro Always Encrypted se zabezpečenými enklávami
- Místní konfigurace šifrování sloupců s využitím Transact-SQL
- Místní konfigurace šifrování sloupců pomocí balíčku DAC
- Místní konfigurace šifrování sloupců pomocí průvodce Always Encrypted v nástroji SSMS