Aracılığıyla paylaş


PowerShell ile sütun şifrelemeyi yerinde yapılandırma

Şunlar için geçerlidir:SQL ServerAzure 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.