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
Felügyelt Azure SQL-példány
Ez a cikk az Always Encrypted kulcsainak az SqlServer PowerShell-modullal történő kiépítésének lépéseit ismerteti. A PowerShell használatával az Always Encrypted kulcsokat létrehozhatja mind szerepkör-elkülönítéssel, mind szerepkör-elkülönítés nélkül, szabályozva, hogy ki férhet hozzá a kulcstárolóban lévő tényleges titkosítási kulcsokhoz, és ki férhet hozzá az adatbázishoz.
Az Always Encrypted kulcskezelésének áttekintéséért, beleértve néhány magas szintű ajánlott eljárásra vonatkozó javaslatot, tekintse meg az Always Encrypted kulcskezelésének áttekintését. Az Always Encryptedhez készült SqlServer PowerShell-modul használatának megkezdéséről további információt az Always Encrypted konfigurálása a PowerShell használatával című témakörben talál.
Kulcskiosztás szerepkör-elkülönítés nélkül
Az ebben a szakaszban ismertetett kulcskiépítési módszer nem támogatja a biztonsági rendszergazdák és a dbA-k közötti szerepkör-elkülönítést. A szakasz néhány lépése a fizikai kulcsokon végzett műveleteket kombinálja a kulcs metaadatain végzett műveletekkel. Ezért a kulcsok kiépítésének ez a módszere a DevOps-modellt használó szervezetek számára ajánlott, vagy ha az adatbázis a felhőben van üzemeltetve, és az elsődleges cél a felhőgazdák (de nem a helyszíni ADATBÁZIS-k) hozzáférésének korlátozása a bizalmas adatokhoz. Nem ajánlott, ha a lehetséges támadók adatbázis-kezelőket is tartalmaznak, vagy ha a adatbázis-kezelőknek nem szabad hozzáféréssel rendelkezniük a bizalmas adatokhoz.
Az egyszerű szöveges kulcsokhoz vagy a kulcstárolóhoz való hozzáféréssel járó lépések futtatása előtt (amelyet az Accesses egyszerű szöveges kulcsok/kulcstároló oszlopban talál a következő táblázatban) győződjön meg arról, hogy a PowerShell-környezet egy olyan biztonságos gépen fut, amely eltér az adatbázist futtató számítógéptől. További információ: A kulcskezelés biztonsági szempontjai.
| Feladat | Cikk | Egyszerű szöveges kulcsok/kulcstárolók elérése | Adatbázis elérése |
|---|---|---|---|
| 1. lépés. Hozzon létre egy oszlop főkulcsát egy kulcstárolóban. Jegyzet: Az SqlServer PowerShell-modul nem támogatja ezt a lépést. Ha parancssorból szeretné elvégezni ezt a feladatot, használja a kiválasztott kulcstárolóhoz tartozó eszközöket. |
Oszlop főkulcsainak létrehozása és tárolása az Always Encryptedhez | Igen | Nem |
| 2. lépés. Indítsa el a PowerShell-környezetet, és importálja az SqlServer PowerShell-modult. | Always Encrypted konfigurálása a PowerShell használatával | Nem | Nem |
| 3. lépés. Csatlakozzon a kiszolgálóhoz és az adatbázishoz. | Csatlakozás adatbázishoz | Nem | Igen |
| 4. lépés. Hozzon létre egy SqlColumnMasterKeySettings objektumot, amely információkat tartalmaz az oszlop főkulcsának helyéről. Az SqlColumnMasterKeySettings egy olyan objektum, amely a memóriában (a PowerShellben) létezik. Használja a kulcstárolóra jellemző parancsmagot. |
Új-SqlAzureKeyVaultOszlopFőKulcsBeállítások Új-SqlTanúsítványTárolóOszlopFőkulcsBeállítások Új-SqlCngOszlopMesterKulcsBeállítások Új-SqlCspOszlopMesterKulcsBeállítások |
Nem | Nem |
| 5. lépés. Hozza létre az oszlop főkulcsának metaadatait az adatbázisban. Jegyzet: Nem ellenőrizzük az oszlop főkulcsának létrehozásához használt kulcsok vagy tanúsítványok érvényességét. |
[New-SqlColumnMasterKey](/powershell/sqlserver/sqlserver/vlatest/new-sqlcolumnmasterkey Megjegyzés: A borítók alatt a parancsmag a CREATE COLUMN MASTER KEY utasítást bocsátja ki a kulcs metaadatainak létrehozásához. |
Nem | Igen |
| 6. lépés. Hitelesítés az Azure-ban, ha az oszlop főkulcsa az Azure Key Vaultban van tárolva. | Connect-AzAccount | Igen | Nem |
| 7. lépés. Szerezze be az Azure kulcstárak hozzáférési tokenjét, ha az oszlop főkulcsa az Azure kulcstárban van tárolva. | Get-AzAccessToken | Nem | Nem |
| 8. lépés. Hozzon létre egy új oszloptitkosítási kulcsot, titkosítsa az oszlop főkulcsával, és hozzon létre oszloptitkosítási kulcs metaadatait az adatbázisban. |
New-SqlColumnEncryptionKey Jegyzet: Használja a parancsmag egy olyan változatát, amely belsőleg létrehoz és titkosít egy oszloptitkosítási kulcsot. Jegyzet: A borítók alatt a parancsmag kiadja a CREATE COLUMN ENCRYPTION KEY utasítást a kulcs metaadatainak létrehozásához. |
Igen | Igen |
Windows Tanúsítványtár szerepkör-elkülönítés nélkül (példa)
Ez a szkript egy végponttól végpontig példa egy olyan oszlop főkulcsának létrehozására, amely egy tanúsítvány a Windows Tanúsítványtárolóban, oszloptitkosítási kulcs létrehozására és titkosítására, valamint kulcs metaadatok létrehozására egy SQL Server-adatbázisban.
# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange
# Import the SqlServer module.
Import-Module "SqlServer"
# 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; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName
Azure Key Vault szerepkör-elkülönítés nélkül (példa)
Ez a szkript egy végpontok közötti példa egy kulcstartó kiépítésére és konfigurálására az Azure Key Vaultban, egy oszlop-főkulcs létrehozása a tárolóban, oszloptitkosítási kulcs létrehozása és titkosítása, valamint kulcs metaadatainak létrehozása egy Azure SQL-adatbázisban.
# Create a column master key in Azure Key Vault.
Import-Module Az
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"
# Connect to your database (Azure SQL database).
Import-Module "SqlServer"
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.Key.Kid
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings -KeyVaultAccessToken $keyVaultAccessToken
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken
CNG/KSP szerepkör szétválasztása nélkül (példa)
Az alábbi szkript egy végpontok közötti példa egy oszlop főkulcsának létrehozására egy kulcstárban, amely implementálja a titkosítási next generation API-t (CNG), létrehoz és titkosít egy oszloptitkosítási kulcsot, és kulcs metaadatokat hoz létre egy SQL Server-adatbázisban.
A példa a Microsoft Szoftverkulcstár-szolgáltatót használó kulcstárolót használja. Módosíthatja a példát úgy, hogy egy másik tárolót használjon, például a hardveres biztonsági modult. Ehhez meg kell győződnie arról, hogy a CNG-t az eszközön megvalósító kulcstároló-szolgáltató (KSP) telepítve van és megfelelően működik a gépen. A Microsoft Software Key Storage Provider-t le kell cserélnie az eszköz KSP-nevével.
# Create a column master key in a key store that has a CNG provider, a.k.a key store provider (KSP).
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
# Import the SqlServer module.
Import-Module "SqlServer"
# 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; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCngColumnMasterKeySettings -CngProviderName $cngProviderName -KeyName $cngKeyName
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName
Kulcskiosztás szerepkör-elkülönítéssel
Ez a szakasz a titkosítás konfigurálását ismerteti, ha a biztonsági rendszergazdák nem férnek hozzá az adatbázishoz, és az adatbázisgazdák nem férnek hozzá a kulcstárolóhoz vagy az egyszerű szöveges kulcsokhoz.
Biztonsági rendszergazda
Az egyszerű szöveges kulcsokhoz vagy a kulcstárolóhoz való hozzáféréssel járó lépések futtatása előtt (a következő táblázat Accesses egyszerű szöveges kulcsainak/kulcstároló oszlopában azonosítva) győződjön meg arról, hogy:
- A PowerShell-környezet egy olyan biztonságos gépen fut, amely eltér az adatbázist futtató számítógéptől.
- A szervezet adatbázis-rendszergazdái nem férnek hozzá a géphez (ez a szerepkör-elkülönítés célját nem tenné lehetővé).
További információ: A kulcskezelés biztonsági szempontjai.
| Feladat | Cikk | Egyszerű szöveges kulcsok/kulcstárolók elérése | Adatbázis elérése |
|---|---|---|---|
| 1. lépés. Hozzon létre egy oszlop főkulcsát egy kulcstárolóban. Jegyzet: Az SqlServer modul nem támogatja ezt a lépést. Ha parancssorból szeretné elvégezni ezt a feladatot, a kulcstároló típusának megfelelő eszközöket kell használnia. |
Oszlop főkulcsainak létrehozása és tárolása az Always Encryptedhez | Igen | Nem |
| 2. lépés. Indítsa el a PowerShell-munkamenetet, és importálja az SqlServer modult. | Az SqlServer modul importálása | Nem | Nem |
| 3. lépés. Hozzon létre egy SqlColumnMasterKeySettings objektumot, amely információkat tartalmaz az oszlop főkulcsának helyéről. Az SqlColumnMasterKeySettings egy olyan objektum, amely a memóriában (a PowerShellben) létezik. Használja a kulcstárolóra jellemző parancsmagot. |
Új-SqlAzureKeyVaultOszlopFőKulcsBeállítások Új-SqlTanúsítványTárolóOszlopFőkulcsBeállítások Új-SqlCngOszlopMesterKulcsBeállítások Új-SqlCspOszlopMesterKulcsBeállítások |
Nem | Nem |
| 4. lépés. Hitelesítés az Azure-ban, ha az oszlop főkulcsa az Azure Key Vaultban van tárolva. | Connect-AzAccount | Igen | Nem |
| 5. lépés. Szerezze be az Azure kulcstárak hozzáférési tokenjét, ha az oszlop főkulcsa az Azure kulcstárban van tárolva. | Get-AzAccessToken | Nem | Nem |
| 6. lépés. Hozzon létre egy oszloptitkosítási kulcsot, majd titkosítsa azt az oszlopmester-kulccsal, hogy létrejöjjön az oszloptitkosítási kulcs titkosított értéke. | New-SqlColumnEncryptionKeyEncryptedValue | Igen | Nem |
| 7. lépés. Adja meg az oszlop főkulcsának helyét (a szolgáltató nevét és az oszlop főkulcsának elérési útját), valamint az oszloptitkosítási kulcs titkosított értékét a DBA-nak. | Tekintse meg a példákat a cikk végén. | Nem | Nem |
DBA
A adatbázisgazdák a biztonsági rendszergazdától kapott információkat (a fenti 7. lépés) használják az Always Encrypted kulcs metaadatainak létrehozására és kezelésére az adatbázisban.
| Feladat | Cikk | Egyszerű szöveges kulcsok elérése | Adatbázis elérése |
|---|---|---|---|
| 1. lépés. Szerezze be az oszlop főkulcsának helyét és az oszloptitkosítási kulcs titkosított értékét a biztonsági rendszergazdától. | Tekintse meg a példákat a cikk végén. | Nem | Nem |
| 2. lépés. Indítsa el a PowerShell-környezetet, és importálja az SqlServer modult. | Always Encrypted konfigurálása a PowerShell használatával | Nem | Nem |
| 3. lépés. Csatlakozzon a kiszolgálóhoz és egy adatbázishoz. | Csatlakozás adatbázishoz | Nem | Igen |
| 4. lépés. Hozzon létre egy SqlColumnMasterKeySettings objektumot, amely információkat tartalmaz az oszlop főkulcsának helyéről. Az SqlColumnMasterKeySettings egy olyan objektum, amely a memóriában létezik. | Új-SqlOszlopfőkulcsBeállítások | Nem | Nem |
| 5. lépés. Hozza létre az oszlop főkulcsának metaadatait az adatbázisban. Jegyzet: Nem ellenőrizzük az oszlop főkulcsának létrehozásához használt kulcsok vagy tanúsítványok érvényességét. |
New-SqlColumnMasterKey Megjegyzés: A fedőlap alatt a parancsmag a CREATE COLUMN MASTER KEY (Transact-SQL) utasítást bocsátja ki az oszlop főkulcs metaadatainak létrehozásához. |
Nem | Igen |
| 6. lépés. Hozza létre az oszloptitkosítási kulcs metaadatait az adatbázisban. | Új-SQLOszlopTitkosításiKulcs Jegyzet: A dbA-k a parancsmag egy olyan változatát használják, amely csak oszloptitkosítási kulcs metaadatait hozza létre. A borítók alatt a parancsmag kiadja a CREATE COLUMN ENCRYPTION KEY (Transact-SQL) utasítást az oszloptitkosítási kulcs metaadatainak létrehozásához. |
Nem | Igen |
Windows Tanúsítványtároló szerepkör-elkülönítéssel (példa)
Biztonsági rendszergazda
# Create a column master key in Windows Certificate Store.
$storeLocation = "CurrentUser"
$certPath = "Cert:" + $storeLocation + "\My"
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation $certPath -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange
# Import the SqlServer module
Import-Module "SqlServer"
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint
# Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key.
$encryptedValue = New-SqlColumnEncryptionKeyEncryptedValue -TargetColumnMasterKeySettings $cmkSettings
# Share the location of the column master key and an encrypted value of the column encryption key with a DBA, via a CSV file on a share drive
$keyDataFile = "Z:\keydata.txt"
"KeyStoreProviderName, KeyPath, EncryptedValue" > $keyDataFile
$cmkSettings.KeyStoreProviderName + ", " + $cmkSettings.KeyPath + ", " + $encryptedValue >> $keyDataFile
# Read the key data back to verify
$keyData = Import-Csv $keyDataFile
$keyData.KeyStoreProviderName
$keyData.KeyPath
$keyData.EncryptedValue
DBA
# Obtain the location of the column master key and the encrypted value of the column encryption key from your Security Administrator, via a CSV file on a share drive.
$keyDataFile = "Z:\keydata.txt"
$keyData = Import-Csv $keyDataFile
# Import the SqlServer module
Import-Module "SqlServer"
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlColumnMasterKeySettings -KeyStoreProviderName $keyData.KeyStoreProviderName -KeyPath $keyData.KeyPath
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -EncryptedValue $keyData.EncryptedValue
Kapcsolódó tartalom
- Oszloptitkosítás konfigurálása az Always Encrypted és a PowerShell használatával
- Mindig titkosított kulcsok elforgatása a PowerShell használatával
- Alkalmazások fejlesztése az Always Encrypted használatával
- Mindig titkosítva
- Az Always Encrypted kulcskezelésének áttekintése
- Oszlop főkulcsainak létrehozása és tárolása az Always Encryptedhez
- Always Encrypted konfigurálása a PowerShell használatával
- Always Encrypted-kulcsok kiépítése az SQL Server Management Studióval
- CREATE COLUMN MASTER KEY (Transact-SQL)
- DROP COLUMN MASTER KEY (Transact-SQL)
- OSZLOPTITKOSÍTÁSI KULCS LÉTREHOZÁSA (Transact-SQL)
- ALTER COLUMN ENCRYPTION KEY (Transact-SQL)
- DROP COLUMN ENCRYPTION KEY (Transact-SQL)
- sys.column_master_keys (Transact-SQL)
- sys.oszlop_titkosítási_kulcsok (Transact-SQL)