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 2019 (15.x) és újabb verziók Windows
Azure SQL Database-en
Ez a cikk ismerteti, hogyan lehet enklávé-kompatibilis kulcsokat kialakítani, amelyek támogatják a számításokat a kiszolgálóoldali biztonságos enklávékban, amelyeket a Always Encrypted biztonságos enklávékkalhasználnak.
Az Always Encrypted kulcsok kezelésének általános irányelvei és folyamatai vonatkoznak az enklávé-kompatibilis kulcsok kiépítésekor. Ez a cikk az Always Encryptedre vonatkozó, biztonságos enklávékkal kapcsolatos részleteket ismerteti.
Ha enklávé-kompatibilis oszlop főkulcsát szeretné kiépíteni az SQL Server Management Studio vagy a PowerShell használatával, győződjön meg arról, hogy az új kulcs támogatja az enklávészámításokat. Ez azt eredményezi, hogy az eszköz (SSMS vagy PowerShell) létrehozza az CREATE COLUMN MASTER KEY utasítást, amely beállítja a ENCLAVE_COMPUTATIONS az adatbázis főkulcs-metaadatainak oszlopaiban. További információ: CREATE COLUMN MASTER KEY (Transact-SQL).
Az eszköz digitálisan is aláírja az oszlopminta tulajdonságait az oszlop főkulcsával, és az aláírást az adatbázis metaadataiban tárolja. Az aláírás megakadályozza a rosszindulatú illetéktelen beavatkozást a ENCLAVE_COMPUTATIONS beállításnál. Az SQL-ügyfélillesztők az enklávé használatának engedélyezése előtt ellenőrzik az aláírásokat. Így a biztonsági rendszergazdák szabályozhatják, hogy mely oszlopadatok számíthatók ki az enklávéban.
Miután definiálta az oszlopfőkulcsot a metaadatokban, a ENCLAVE_COMPUTATIONS tulajdonság nem módosítható. Ha egy meglévő oszloptitkosítási kulcs által titkosított oszloptitkosítási kulccsal szeretné engedélyezni az enklávészámítást, forgassa el az oszlop főkulcsát, és cserélje le egy enklávé-kompatibilis oszlop főkulcsára. Lásd: Az enklávé-kompatibilis kulcsok elforgatása.
Jegyzet
Jelenleg mind az SSMS, mind a PowerShell támogatja az Azure Key Vaultban vagy a Windows Tanúsítványtárolóban tárolt enklávé-kompatibilis oszlop főkulcsait. A hardveres biztonsági modulok (CNG vagy CAPI használatával) nem támogatottak.
Enklávé-kompatibilis oszloptitkosítási kulcs létrehozásához meg kell győződnie arról, hogy az új kulcs titkosításához enklávé-kompatibilis oszlop főkulcsot kell választania.
Az alábbi szakaszok további részleteket nyújtanak arról, hogyan építhet ki enklávé-kompatibilis kulcsokat az SSMS és a PowerShell használatával.
Enklávé-kompatibilis kulcsok kiépítése az SQL Server Management Studióval
Az SQL Server Management Studióban kiépítheti a következőt:
- Enklávé-kompatibilis oszlop főkulcs az Új oszlop főkulcs párbeszédpanel használatával.
- Enklávébarát oszloptitkosítási kulcs az Új oszloptitkosítási kulcs párbeszédpanel használatával.
Az Always Encrypted varázsló lehetővé teszi egy enklávé-kompatibilis oszlop főkulcsának és egy enklávé-kompatibilis oszloptitkosítási kulcsnak a létrehozását is.
Telepítse az SQL Server Management Studio (SSMS) legújabb verzióját.
Az enklávé-kompatibilis oszlopfőkulcsok létrehozása az Új oszlopfőkulcs párbeszédpanelen
Enklávé-kompatibilis oszlop főkulcs létrehozásához kövesse a Oszlop főkulcsainak létrehozása az Új oszlop főkulcs párbeszédpanellel lépéseit. Győződjön meg arról, hogy Enklávészámítások engedélyezéselehetőséget választja. Tekintse meg az alábbi képernyőképet:
Jegyzet
Az Enklávészámítás engedélyezése jelölőnégyzet csak akkor jelenik meg, ha egy biztonságos enklávé van konfigurálva az adatbázishoz. Ha SQL Servert használ, olvassa el a biztonságos enklávé konfigurálása az SQL Serverben című témakört. Ha az Azure SQL Database-t használja, tekintse meg a Biztonságos enklávékkal az Always Encrypted engedélyezése az Azure SQL Database-hez című útmutatót.
Borravaló
Ha ellenőrizni szeretné, hogy az oszlop főkulcsa enklávé-kompatibilis-e, kattintson rá a jobb gombbal az Object Explorerben, és válassza a Tulajdonságoklehetőséget. Ha a kulcs enklávé-kompatibilis, Enklávé-számítások: Engedélyezett jelenik meg az ablakban a kulcs tulajdonságaival. Másik lehetőségként használhatja a sys.column_master_keys (Transact-SQL) nézetet.
Enklávé-kompatibilis oszloptitkosítási kulcsok kiépítése az Új oszloptitkosítási kulcs párbeszédpanelen
Enklávé-kompatibilis oszloptitkosítási kulcs kiépítéséhez kövesse Oszloptitkosítási kulcsok kiépítése az Új oszloptitkosítási kulcs párbeszédpanelcímű témakörben leírt lépéseket. Az oszlop főkulcsának kiválasztásakor győződjön meg arról, hogy az enklávé-kompatibilis.
Borravaló
Ha ellenőrizni szeretné, hogy az oszloptitkosítási kulcs enklávéval kompatibilis-e, kattintson rá a jobb gombbal az Object Explorerben, és válassza a Tulajdonságoklehetőséget. Ha a kulcs enklávé-kompatibilis, Enklávé-számítások: Engedélyezett jelenik meg az ablakban a kulcs tulajdonságaival.
Enklávé-kompatibilis kulcsok kiépítése a PowerShell használatával
Ha enklávé-kompatibilis kulcsokat szeretne kiépíteni a PowerShell használatával, az SqlServer PowerShell-modul 22-es vagy újabb verziójára van szükség.
Jegyzet
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.
Általánosságban elmondható, hogy az Always Encrypted PowerShell-kulcskiépítési munkafolyamatai (szerepkör-elkülönítéssel és anélkül) is érvényesek az enklávé-kompatibilis kulcsokra, Mindig titkosított kulcsok kiépítése PowerShell- használatával. Ez a szakasz az enklávéval kompatibilis kulcsokra vonatkozó részleteket ismerteti.
Az SqlServer PowerShell modul kibővíti a New-SqlCertificateStoreColumnMasterKeySettings és New-SqlAzureKeyVaultColumnMasterKeySettings parancsmagokat a -AllowEnclaveComputations paraméterrel, hogy lehetővé tegye egy olyan oszlop főkulcsának megadását, amely enklávé-kompatibilis a kiépítési folyamat során. Bármelyik parancsmag létrehoz egy helyi objektumot, amely egy oszlop főkulcsának tulajdonságait tartalmazza (az Azure Key Vaultban vagy a Windows Tanúsítványtárolóban). Ha meg van adva, a -AllowEnclaveComputations tulajdonság enklávé-kompatibilisként jelöli meg a kulcsot a helyi objektumban. Emellett a parancsmag hozzáfér a hivatkozott oszlop főkulcsához (az Azure Key Vaultban vagy a Windows Tanúsítványtárolóban) a kulcs tulajdonságainak digitális aláírásához. Miután létrehozott egy beállításobjektumot egy új enklávé-kompatibilis oszlop főkulcsához, a New-SqlColumnMasterKey parancsmag későbbi meghívásához használhatja az új kulcsot leíró metaadat-objektum létrehozásához az adatbázisban.
Az enklávé-kompatibilis oszloptitkosítási kulcsok kiépítése nem különbözik az olyan oszloptitkosítási kulcsok kiépítésétől, amelyek nem enklávé-kompatibilisek. Biztosítsa, hogy a fő oszlopkulcs, amelyet az új oszlopkódolási kulcs titkosításához használnak, enklávé-kompatibilis legyen.
Jegyzet
Az SqlServer PowerShell-modul jelenleg nem támogatja a hardveres biztonsági modulokban (CNG vagy CAPI használatával) tárolt enklávé-kompatibilis kulcsok kiépítését.
Példa – enklávé-kompatibilis kulcsok kiépítése a Windows Tanúsítványtároló használatával
Az alábbi teljes körű példa bemutatja, hogyan hozhat létre enklávéval bővített kulcsokat, a Windows Tanúsítványtárolóban tárolt oszlopfő kulcsot használva. A szkript az Windows tanúsítványtároló szerepkör-elkülönítés nélküli (példa)példán alapul. Fontos megjegyezni, hogy a -AllowEnclaveComputations paraméter használata a New-SqlCertificateStoreColumnMasterKeySettings parancsmagban, ami az egyetlen különbség a két példában szereplő munkafolyamatok között.
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$DatabaseName = '<database name>',
[Parameter(Mandatory = $false)]
[string]$ServerName = "<server name>",
[Parameter(Mandatory = $false)]
[string]$CertificateSubject = "AlwaysEncryptedCert",
[Parameter(Mandatory = $false)]
[string]$CmkName = "CMK",
[Parameter(Mandatory = $false)]
[string]$CekName = "CEK"
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
Import-Module SqlServer -MinimumVersion 22.0.50 -ErrorAction Stop
Write-Host "[AE] Locating certificate '$CertificateSubject' in CurrentUser\\My"
$cert = Get-ChildItem -Path Cert:CurrentUser\My |
Where-Object { $_.Subject -eq "CN=$CertificateSubject" } |
Sort-Object NotAfter -Descending |
Select-Object -First 1
if (-not $cert) {
Write-Host "[AE] Certificate not found. Creating self-signed certificate."
$cert = New-SelfSignedCertificate `
-Subject $CertificateSubject `
-CertStoreLocation Cert:CurrentUser\My `
-KeyExportPolicy Exportable `
-Type DocumentEncryptionCert `
-KeyUsage DataEncipherment `
-KeySpec KeyExchange
}
Write-Host "[AE] Connecting to SQL Server '$ServerName' / Database '$DatabaseName'"
$connStr = "Server=$ServerName;Database=$DatabaseName;Integrated Security=True;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30"
try {
$database = Get-SqlDatabase -ConnectionString $connStr -ErrorAction Stop
}
catch {
Write-Error "Failed to connect to '$ServerName' database '$DatabaseName'. Verify instance name SQL2025, database existence, and local permissions."
throw
}
Write-Host "[AE] Creating CMK settings from certificate thumbprint"
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint -AllowEnclaveComputations
Write-Host "[AE] Ensuring CMK '$CmkName' exists"
$existingCmk = Get-SqlColumnMasterKey -InputObject $database | Where-Object { $_.Name -eq $CmkName }
if (-not $existingCmk) {
New-SqlColumnMasterKey -Name $CmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings | Out-Null
}
Write-Host "[AE] Ensuring CEK '$CekName' exists"
$existingCek = Get-SqlColumnEncryptionKey -InputObject $database | Where-Object { $_.Name -eq $CekName }
if (-not $existingCek) {
New-SqlColumnEncryptionKey -Name $CekName -InputObject $database -ColumnMasterKey $CmkName | Out-Null
}
Write-Host "Completed successfully"
Példa – enklávé-kompatibilis kulcsok kiépítése az Azure Key Vault használatával
Az alábbi átfogó példa bemutatja, hogyan hozhat létre enklávé-kompatibilis kulcsokat, és hogyan tárolhatja az oszlop főkulcsát az Azure Key Vaultban. A szkript Azure Key Vault szerepkör-elkülönítés nélküli (példa)példán alapul. Fontos megjegyezni, hogy két különbség van az enklávé-kompatibilis kulcsok munkafolyamata és a nem enklávé-kompatibilis kulcsok között.
- Az alábbi szkriptben az New-SqlCertificateStoreColumnMasterKeySettings az
-AllowEnclaveComputationsparamétert használja az új oszlop főkulcsának enklávé-engedélyezéséhez. - Az alábbi szkript a Get-AzAccessToken parancsmaggal szerez be hozzáférési jogkivonatot a kulcstartókhoz. Erre azért van szükség, mert a New-SqlAzureKeyVaultColumnMasterKeySettings
hozzáféréssel kell rendelkeznie az Azure Key Vaulthoz az oszlop főkulcsának tulajdonságainak aláírásához.
param(
[Parameter(Mandatory = $true)] [string]$SubscriptionId,
[Parameter(Mandatory = $true)] [string]$ResourceGroupName,
[Parameter(Mandatory = $true)] [string]$AzureLocation,
[Parameter(Mandatory = $true)] [string]$KeyVaultName,
[Parameter(Mandatory = $true)] [string]$KeyName,
[Parameter(Mandatory = $true)] [string]$ServerName,
[Parameter(Mandatory = $true)] [string]$DatabaseName,
[string]$CmkName = "CMK",
[string]$CekName = "CEK",
[bool]$AssignRbacToCurrentPrincipal = $true
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
Import-Module Az.Accounts -ErrorAction Stop
Import-Module Az.Resources -ErrorAction Stop
Import-Module Az.KeyVault -ErrorAction Stop
Import-Module SqlServer -ErrorAction Stop
function Get-CurrentPrincipalObjectId {
param([string]$AccountId)
$userSignedIn = Get-AzADUser -SignedIn -ErrorAction SilentlyContinue
if ($userSignedIn) { return $userSignedIn.Id }
$user = Get-AzADUser -UserPrincipalName $AccountId -ErrorAction SilentlyContinue
if ($user) { return $user.Id }
$sp = Get-AzADServicePrincipal -DisplayName $AccountId -ErrorAction SilentlyContinue | Select-Object -First 1
if ($sp) { return $sp.Id }
throw "Could not resolve Microsoft Entra object id for account '$AccountId'."
}
try {
Write-Host "[AE] Signing in and selecting subscription"
Connect-AzAccount | Out-Null
$ctx = Set-AzContext -SubscriptionId $SubscriptionId
Write-Host "[AE] Ensuring resource group exists"
$resourceGroup = Get-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
if (-not $resourceGroup) {
$resourceGroup = New-AzResourceGroup -Name $ResourceGroupName -Location $AzureLocation
}
Write-Host "[AE] Ensuring key vault exists (RBAC mode)"
$vault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue
if (-not $vault) {
$vault = New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -Location $AzureLocation -EnableRbacAuthorization
}
if (-not $vault.EnableRbacAuthorization) {
throw "Key Vault '$KeyVaultName' is not using RBAC authorization. Enable RBAC authorization on the vault before running this script."
}
if ($AssignRbacToCurrentPrincipal) {
Write-Host "[AE] Ensuring RBAC role assignment"
$principalSignInName = $ctx.Account.Id
$roleName = "Key Vault Crypto Officer"
$existingRole = Get-AzRoleAssignment -SignInName $principalSignInName -Scope $vault.ResourceId -RoleDefinitionName $roleName -ErrorAction SilentlyContinue
if (-not $existingRole) {
New-AzRoleAssignment -SignInName $principalSignInName -Scope $vault.ResourceId -RoleDefinitionName $roleName | Out-Null
}
}
Write-Host "[AE] Ensuring column master key material exists in Key Vault"
$akvKey = Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $KeyName -ErrorAction SilentlyContinue
if (-not $akvKey) {
$akvKey = Add-AzKeyVaultKey -VaultName $KeyVaultName -Name $KeyName -Destination "Software"
}
Write-Host "[AE] Connecting to Azure SQL and creating metadata"
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl "https://vault.azure.net").Token
$connStr = "Server=tcp:$ServerName.database.windows.net,1433;Database=$DatabaseName;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Interactive"
$database = Get-SqlDatabase -ConnectionString $connStr -Encrypt Mandatory
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyUrl $akvKey.Key.Kid -AllowEnclaveComputations
$existingCmk = Get-SqlColumnMasterKey -InputObject $database | Where-Object { $_.Name -eq $CmkName }
if (-not $existingCmk) {
New-SqlColumnMasterKey -Name $CmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings | Out-Null
}
$existingCek = Get-SqlColumnEncryptionKey -InputObject $database | Where-Object { $_.Name -eq $CekName }
if (-not $existingCek) {
New-SqlColumnEncryptionKey -Name $CekName -InputObject $database -ColumnMasterKey $CmkName -KeyVaultAccessToken $keyVaultAccessToken | Out-Null
}
Write-Host "Completed successfully"
}
catch {
Write-Error "Script failed: $($_.Exception.Message)"
throw
}
Kapcsolódó tartalom
- Transact-SQL utasítások futtatása biztonságos enklávékban
- Az oszlopok titkosításának helyben történő konfigurálása az Always Encrypted és biztonságos enklávék használatával
- Az Always Encrypted engedélyezése biztonságos enklávékkal a meglévő titkosított oszlopok esetében
- Alkalmazások fejlesztése az Always Encrypted használatával biztonságos enklávékkal
- Az Always Encrypted használatának első lépései biztonságos enklávékkal
- Az Always Encrypted kulcsok kezelése biztonságos enklávékkal
- CREATE COLUMN MASTER KEY (Transact-SQL)