Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Ez a cikk a Set-SqlColumnEncryption parancsmaggal (aSqlServer PowerShell-modulban) ismerteti az adatbázisoszlopok cél Always Encrypted konfigurációjának beállításának lépéseit. A Set-SqlColumnEncryption parancsmag módosítja a céladatbázis sémáját és a kijelölt oszlopokban tárolt adatokat. Az oszlopban tárolt adatok titkosíthatók, újra titkosíthatók vagy visszafejthetők az oszlopokhoz megadott céltitkosítási beállításoktól és az aktuális titkosítási konfigurációtól függően. A helyszíni titkosítási műveletek enklávéval történő aktiválásához a Set-SqlColumnEncryption parancsnak egy olyan kapcsolati sztringgel létrehozott adatbázis-kapcsolatot kell használnia, amely tartalmazza az Igazolási protokoll és opcionálisan az Igazolási URL kulcsszavakat.
Előfeltételek
A céltitkosítási konfiguráció beállításához győződjön meg arról, hogy:
- egy enklávé-kompatibilis oszloptitkosítási kulcs van konfigurálva az adatbázisban (oszlop titkosítása vagy újratitkosítása esetén). További információ: Az Always Encrypted kulcsainak kezelése biztonságos enklávékkal.
- Ön az adatbázishoz van kapcsolódva, az Always Encrypted engedélyezve van, és a kapcsolati sztringben meg vannak adva az igazolási tulajdonságokkal.
- A PowerShell-parancsmagokat futtató számítógépről hozzáférhet az oszlop főkulcsához minden olyan oszlophoz, amelyet titkosítani, újratitkosítani vagy visszafejteni szeretne.
- Az SqlServer PowerShell-modul 22.0.50-es vagy újabb verzióját használja. Helyszíni online titkosításhoz használja az SqlServer PowerShell-modul 22.3.0-s vagy újabb verzióját.
Note
Microsoft a PowerShell 7 vagy újabb verzióját javasolja Always Encrypted PowerShell-szkriptek futtatásakor. A PowerShell 7 továbbfejlesztett platformfüggetlen támogatást, jobb teljesítményt és a legújabb kompatibilitást biztosít az SqlServer modullal (v22+), amely számos Always Encrypted-forgatókönyvhöz szükséges.
Biztonsági szempontok
A Set-SqlColumnEncryption parancsmag, amely az adatbázisoszlopok titkosításának konfigurálására szolgál, mind az Always Encrypted kulcsokat, mind az adatbázisoszlopokban tárolt adatokat kezeli. Ezért fontos, hogy biztonságos számítógépen futtassa a parancsmagot. Ha az adatbázis az SQL Serverben található, hajtsa végre a parancsmagot egy másik számítógépről, mint az SQL Server-példányt üzemeltető számítógép. Mivel az Always Encrypted elsődleges célja annak biztosítása, hogy a titkosított bizalmas adatok akkor is biztonságosak legyenek, ha az adatbázisrendszer biztonsága sérül, a kulcsokat és/vagy bizalmas adatokat az SQL Server-számítógépen feldolgozó PowerShell-szkriptek végrehajtása csökkentheti vagy csökkentheti a funkció előnyeit.
| Feladat | Cikk | Egyszerű szöveges kulcsok/kulcstárolók elérése | Adatbázis elérése |
|---|---|---|---|
| 1. lépés. Indítsa el a PowerShell-környezetet, és importálja az SqlServer modult. | SqlServer-modul importálása | Nem | Nem |
| 2. lépés. Csatlakozás a kiszolgálóhoz és az adatbázishoz | Csatlakozás adatbázishoz | Nem | Igen |
| 3. lépés. Hitelesítés az Azure-ban, ha az oszlop főkulcsa (az elforgatandó oszloptitkosítási kulcs védelme) az Azure Key Vaultban van tárolva | Connect-AzAccount | Igen | Nem |
| 4. lépés. Szerezze be az Azure Key Vaults hozzáférési jogkivonatát. | Get-AzAccessToken | Nem | Nem |
| 5. lépés. SqlColumnEncryptionSettings-objektumok tömbjének létrehozása – egy-egy adatbázisoszlophoz, amelyet titkosítani, újratitkosítani vagy visszafejteni szeretne. Az SqlColumnMasterKeySettings egy olyan objektum, amely a memóriában (a PowerShellben) létezik. Egy oszlop céltitkosítási sémájának megadása. | New-SqlColumnEncryptionSettings | Nem | Nem |
| 6. lépés. Állítsa be az előző lépésben létrehozott SqlColumnMasterKeySettings-objektumok tömbjében megadott kívánt titkosítási konfigurációt. Az oszlop titkosítása, újratitkosítása vagy visszafejtése a megadott célbeállításoktól és az oszlop aktuális titkosítási konfigurációjától függően történik. |
Set-SqlColumnEncryption Megjegyzés: Ez a lépés hosszú időt vehet igénybe. Az alkalmazások nem tudják elérni a táblákat a teljes műveleten vagy annak egy részén keresztül a választott megközelítéstől függően (online vagy offline). |
Igen | Igen |
Oszlopok titkosítása VBS-enklávékkal
Az alábbi példa bemutatja a céltitkosítási konfiguráció beállítását néhány oszlophoz. Ha egyik oszlop sincs még titkosítva, az titkosítva lesz. Ha bármelyik oszlop már titkosítva van egy másik kulccsal és/vagy más titkosítási típussal, a rendszer visszafejti, majd újra titkosítja a megadott célkulcs/típus használatával. A VBS-enklávék jelenleg nem támogatják a hitelesítést. Az EnclaveAttestationProtocol paramétert úgy kell beállítani, hogy Nincs, és az EnclaveAttestationUrl nem szükséges.
# Import modules
Import-Module SqlServer
Import-Module Az.Accounts
# Edit these values.
$serverName = '<your-server>.database.windows.net'
$databaseName = 'ContosoHR'
$cekName = 'CEK'
$subscriptionId = '<your-subscription-id>'
# Columns to encrypt with the CEK.
$columnsToEncrypt = @(
'dbo.Employees.SSN',
'dbo.Employees.Salary'
)
# Sign in with Microsoft Entra and select subscription.
Connect-AzAccount
Set-AzContext -SubscriptionId $subscriptionId
# Token needed when CEK uses Azure Key Vault CMK.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl 'https://vault.azure.net').Token
# Connect to Azure SQL Database using Entra auth.
$connStr = "Server=tcp:$serverName,1433;Database=$databaseName;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Interactive"
$database = Get-SqlDatabase -ConnectionString $connStr
# Build encryption settings for target columns.
$columnEncryptionSettings = @(
$columnsToEncrypt | ForEach-Object {
New-SqlColumnEncryptionSettings -ColumnName $_ -EncryptionType Randomized -EncryptionKey $cekName
}
)
# Encrypt or re-encrypt the columns.
Set-SqlColumnEncryption -InputObject $database -ColumnEncryptionSettings $columnEncryptionSettings -EnclaveAttestationProtocol None -LogFileDirectory . -KeyVaultAccessToken $keyVaultAccessToken
Write-Host 'Done.'
Oszlopok visszafejtése – Példa
Az alábbi példa bemutatja, hogyan fejtheti vissza az adatbázisban jelenleg titkosított összes oszlopot.
# 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>"
# Connect to Azure SQL Database using Entra auth.
$connStr = "Server=tcp:$serverName,1433;Database=$databaseName;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Interactive"
$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
Oszlopok titkosítása SGX-enklávékkal
Az alábbi példa bemutatja a céltitkosítási konfiguráció beállítását néhány oszlophoz. Ha egyik oszlop sincs még titkosítva, az titkosítva lesz. Ha bármelyik oszlop már titkosítva van egy másik kulccsal és/vagy más titkosítási típussal, a rendszer visszafejti, majd újra titkosítja a megadott célkulcs/típus használatával. A helyszíni titkosítási műveletek enklávéval történő aktiválásához az EnclaveAttestationProtocol és az EnclaveAttestationUrl paraméterek szükségesek.
# Import modules
Import-Module SqlServer
Import-Module Az.Accounts
# Edit these values.
$serverName = '<your-server>.database.windows.net'
$databaseName = 'ContosoHR'
$cekName = 'CEK'
$subscriptionId = '<your-subscription-id>'
# Columns to encrypt with the CEK.
$columnsToEncrypt = @(
'dbo.Employees.SSN',
'dbo.Employees.Salary'
)
# Sign in with Microsoft Entra and select subscription.
Connect-AzAccount
Set-AzContext -SubscriptionId $subscriptionId
# Token needed when CEK uses Azure Key Vault CMK.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl 'https://vault.azure.net').Token
# Connect to Azure SQL Database using Entra auth.
$connStr = "Server=tcp:$serverName,1433;Database=$databaseName;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Interactive"
$database = Get-SqlDatabase -ConnectionString $connStr
# Build encryption settings for target columns.
$columnEncryptionSettings = @(
$columnsToEncrypt | ForEach-Object {
New-SqlColumnEncryptionSettings -ColumnName $_ -EncryptionType Randomized -EncryptionKey $cekName
}
)
# Encrypt or re-encrypt the columns.
Set-SqlColumnEncryption -InputObject $database -ColumnEncryptionSettings $columnEncryptionSettings -EnclaveAttestationProtocol "AAS" -EnclaveAttestationURL "https://<attestationURL>" -KeyVaultAccessToken $keyVaultAccessToken -LogFileDirectory .
Write-Host 'Done.'
Oszlopok visszafejtése – Példa
Az alábbi példa bemutatja, hogyan fejtheti vissza az adatbázisban jelenleg titkosított összes oszlopot.
# 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>"
# Connect to Azure SQL Database using Entra auth.
$connStr = "Server=tcp:$serverName,1433;Database=$databaseName;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Interactive"
$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
Következő lépés
Kapcsolódó tartalom
- Always Encrypted biztonságos enklávékkal
- Kezelje az Always Encrypted kulcsait biztonságos enklávékkal
- A Transact-SQL használatával történő oszloptitkosítás helybeni konfigurálása
- Oszloptitkosítás konfigurálása közvetlenül a DAC csomaggal
- Oszloptitkosítás konfigurálása az Always Encrypted varázslóval