Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu makalede, Set-SqlColumnEncryption cmdlet'ini (SqlServer PowerShell modülünde) kullanarak veritabanı sütunları için hedef Always Encrypted yapılandırmasını ayarlama adımları sağlanır. Set-SqlColumnEncryption cmdlet'i hem hedef veritabanının şemasını hem de seçili sütunlarda depolanan verileri değiştirir. Sütunda depolanan veriler, sütunlar için belirtilen hedef şifreleme ayarlarına ve geçerli şifreleme yapılandırmasına bağlı olarak şifrelenebilir, yeniden şifrelenebilir veya şifresi çözülebilir. Bir kapanım kullanarak yerinde şifreleme işlemlerini tetiklemek için Set-SqlColumnEncryption, Kanıtlama Protokolü ve isteğe bağlı olarak Kanıtlama URL'si anahtar sözcükleri içeren bir bağlantı dizesiyle oluşturulan bir veritabanı bağlantısını kullanmalıdır.
Önkoşullar
Hedef şifreleme yapılandırmasını ayarlamak için şunları yapmanız gerekir:
- veritabanında enclave özellikli bir sütun şifreleme anahtarı yapılandırılır (bir sütunu şifreliyor veya yeniden şifreliyorsanız). Ayrıntılar için bkz. Güvenli bölgelerle Always Encrypted anahtarlarını yönetme.
- Always Encrypted'ın etkin olduğu veritabanına ve bağlantı dizesinde belirtilen kanıtlama özelliklerine bağlısınız.
- Şifrelemek, yeniden şifrelemek veya şifresini çözmek istediğiniz her sütunun ana sütununa PowerShell cmdlet'lerini çalıştıran bilgisayardan erişebilirsiniz.
- SqlServer PowerShell modülü sürüm 22.0.50 veya üzerini kullanırsınız. Yerinde çevrimiçi şifreleme için SqlServer PowerShell modülü sürüm 22.3.0 veya üzerini kullanın.
Güvenlikle İlgili Dikkat Edilmesi Gerekenler
Veritabanı sütunları için şifrelemeyi yapılandırmak için kullanılan Set-SqlColumnEncryption cmdlet'i hem Always Encrypted anahtarlarını hem de veritabanı sütunlarında depolanan verileri işler. Bu nedenle, cmdlet'i güvenli bir bilgisayarda çalıştırmanız önemlidir. Veritabanınız SQL Server üzerindeyse, cmdlet'i, SQL Server örneğinizi barındıran bilgisayardan farklı bir bilgisayardan yürütün. Always Encrypted'ın birincil hedefi, veritabanı sistemi tehlikeye girmiş olsa bile şifrelenmiş hassas verilerin güvenli olmasını sağlamak olduğundan, SQL Server bilgisayarında anahtarları ve/veya hassas verileri işleyen bir PowerShell betiğini yürütmek özelliğin avantajlarını azaltabilir veya alt edebilir.
| Görev | Makale | Düz metin anahtarlarına/anahtar deposuna erişir | Veritabanına erişir |
|---|---|---|---|
| Adım 1. Bir PowerShell ortamı başlatın ve SqlServer modülünü içeri aktarın. | SqlServer modülünü içeri aktarma | Hayır | Hayır |
| Adım 2. Sunucunuza ve veritabanınıza bağlanma | Veritabanına bağlanma | Hayır | Evet |
| Adım 3. Sütun ana anahtarınız (döndürülecek sütun şifreleme anahtarını korumak) Azure Key Vault'ta depolanıyorsa Azure'da kimlik doğrulaması yapma | Connect-AzAccount | Evet | Hayır |
| Adım 4. Azure Key Vaults için erişim belirteci alma. | Get-AzAccessToken | Hayır | Hayır |
| Adım 5. Şifrelemek, yeniden şifrelemek veya şifresini çözmek istediğiniz her veritabanı sütunu için bir sqlColumnEncryptionSettings nesnesi dizisi oluşturma. SqlColumnMasterKeySettings, bellekte (PowerShell'de) bulunan bir nesnedir. Bir sütun için hedef şifreleme düzenini belirtir. | New-SqlColumnEncryptionSettings | Hayır | Hayır |
| Adım 5. Önceki adımda oluşturduğunuz SqlColumnMasterKeySettings nesneleri dizisinde belirtilen istenen şifreleme yapılandırmasını ayarlayın. Belirtilen hedef ayarlara ve sütunun geçerli şifreleme yapılandırmasına bağlı olarak bir sütun şifrelenir, yeniden şifrelenir veya şifresi çözülür. |
SqlSütunŞifrelemeAyarla Not: Bu adım uzun sürebilir. Uygulamalarınız, seçtiğiniz yaklaşıma (çevrimiçi veya çevrimdışı) bağlı olarak tüm işlem veya bir bölümü aracılığıyla tablolara erişemez. |
Evet | Evet |
VBS kuşatmalarını kullanarak Sütunları Şifreleme
Aşağıdaki örnekte, birkaç sütun için hedef şifreleme yapılandırmasını ayarlama gösterilmektedir. İki sütundan biri henüz şifrelenmemişse şifrelenir. Herhangi bir sütun farklı bir anahtar ve/veya farklı bir şifreleme türü kullanılarak zaten şifrelenmişse, şifresi çözülür ve belirtilen hedef anahtar/türle yeniden şifrelenir. VBS yerleşimleri şu anda doğrulamayı desteklememektedir. EnclaveAttestationProtocol parametresi None olarak ayarlanmalıdır ve EnclaveAttestationUrl gerekli değildir.
# 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
Sütunların Şifresini Çözme - Örnek
Aşağıdaki örnekte, bir veritabanında şu anda şifrelenmiş olan tüm sütunların şifresinin nasıl çözülmüş olduğu gösterilmektedir.
# 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
SGX yerleşkelerini kullanarak sütunları şifreleme
Aşağıdaki örnekte, birkaç sütun için hedef şifreleme yapılandırmasını ayarlama gösterilmektedir. İki sütundan biri henüz şifrelenmemişse şifrelenir. Herhangi bir sütun farklı bir anahtar ve/veya farklı bir şifreleme türü kullanılarak zaten şifrelenmişse, şifresi çözülür ve belirtilen hedef anahtar/türle yeniden şifrelenir. Bir kapanım kullanarak yerinde şifreleme işlemlerini tetikleyebilmek için EnclaveAttestationProtocol ve EnclaveAttestationUrl parametreleri gereklidir.
# 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
Sütunların Şifresini Çözme - Örnek
Aşağıdaki örnekte, bir veritabanında şu anda şifrelenmiş olan tüm sütunların şifresinin nasıl çözülmüş olduğu gösterilmektedir.
# 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
Sonraki adımlar
Ayrıca bkz.
- Güvenli yerleşkeler ile Always Encrypted
- Güvenli kuşatmalarla Always Encrypted anahtarlarını yönetme
- Transact-SQL ile sütun şifrelemeyi yerinde yapılandırma
- DAC paketi ile sütun şifrelemeyi yerinde yapılandırma
- SSMS Always Encrypted sihirbazıyla sütun şifrelemesini yerinde yapılandırma