Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Artikel ini menyediakan langkah-langkah untuk mengatur konfigurasi Always Encrypted target untuk kolom database menggunakan cmdlet Set-SqlColumnEncryption (dalam modul SqlServer PowerShell). Cmdlet Set-SqlColumnEncryption memodifikasi skema database target dan data yang disimpan di kolom yang dipilih. Data yang disimpan dalam kolom dapat dienkripsi, dienkripsi ulang, atau didekripsi, tergantung pada pengaturan enkripsi target yang ditentukan untuk kolom dan konfigurasi enkripsi saat ini. Untuk memicu operasi kriptografi di tempat menggunakan enklave, Set-SqlColumnEncryption harus menggunakan koneksi database yang dibuat menggunakan string koneksi dengan Protokol Pengesahan dan secara opsional kata kunci URL Pengesahan.
Prasyarat
Untuk mengatur konfigurasi enkripsi target, Anda perlu memastikan:
- kunci enkripsi kolom yang didukung enklave dikonfigurasi di dalam basis data (jika Anda mengenkripsi atau mengenkripsi ulang kolom). Untuk detailnya, lihat Mengelola kunci untuk Always Encrypted dengan enklave aman.
- Anda tersambung ke database dengan fitur Always Encrypted diaktifkan dan properti pengesahan yang ditentukan dalam koneksi string.
- Anda dapat mengakses kunci master kolom untuk setiap kolom yang ingin Anda enkripsi, enkripsi ulang, atau dekripsi, dari komputer yang menjalankan cmdlet PowerShell.
- Anda menggunakan modul SqlServer PowerShell versi 22.0.50 atau yang lebih baru. Untuk enkripsi online di tempat, gunakan modul SqlServer PowerShell versi 22.3.0 atau yang lebih baru.
Pertimbangan Keamanan
Cmdlet Set-SqlColumnEncryption, digunakan untuk mengonfigurasi enkripsi untuk kolom database, menangani kunci Always Encrypted dan data yang disimpan dalam kolom database. Oleh karena itu, penting bagi Anda untuk menjalankan cmdlet di komputer yang aman. Jika database Anda berada di SQL Server, jalankan cmdlet dari komputer yang berbeda dari komputer yang menghosting instans SQL Server Anda. Karena tujuan utama Always Encrypted adalah untuk memastikan data sensitif terenkripsi aman bahkan jika sistem database disusupi, menjalankan skrip PowerShell yang memproses kunci dan/atau data sensitif di komputer SQL Server dapat mengurangi atau mengalahkan manfaat fitur.
| Tugas | Artikel | Mengakses kunci teks biasa/penyimpanan kunci | Mengakses database |
|---|---|---|---|
| Langkah 1. Mulai lingkungan PowerShell dan impor modul SqlServer. | Mengimpor modul SqlServer | Tidak | Tidak |
| Langkah 2. Menyambungkan ke server dan database Anda | Menyambungkan ke database | Tidak | Ya |
| Langkah 3. Masuk ke Azure jika kunci master kolom Anda (yang melindungi kunci enkripsi kolom dan perlu diperbarui) disimpan di Azure Key Vault. | Connect-AzAccount | Ya | Tidak |
| Langkah 4. Dapatkan token akses untuk Azure Key Vaults. | Get-AzAccessToken | Tidak | Tidak |
| Langkah 5. Buat array objek SqlColumnEncryptionSettings - satu untuk setiap kolom database, Anda ingin mengenkripsi, mengenkripsi ulang, atau mendekripsi. SqlColumnMasterKeySettings adalah objek yang ada dalam memori (di PowerShell). Ini menentukan skema enkripsi target untuk kolom. | New-SqlColumnEncryptionSettings | Tidak | Tidak |
| Langkah 5. Atur konfigurasi enkripsi yang diinginkan, yang ditentukan dalam array objek SqlColumnMasterKeySettings, yang Anda buat di langkah sebelumnya. Kolom akan dienkripsi, dienkripsi ulang, atau didekripsi, tergantung pada pengaturan target yang ditentukan dan konfigurasi enkripsi kolom saat ini. |
Set-SqlColumnEncryption Catatan: Langkah ini mungkin memakan waktu lama. Aplikasi Anda tidak akan dapat mengakses tabel melalui seluruh operasi atau sebagiannya, tergantung pada pendekatan (online vs. offline), yang Anda pilih. |
Ya | Ya |
Mengenkripsi Kolom menggunakan enklave VBS
Contoh di bawah ini menunjukkan pengaturan konfigurasi enkripsi target untuk beberapa kolom. Jika salah satu kolom belum dienkripsi, kolom tersebut akan dienkripsi. Jika ada kolom yang sudah dienkripsi menggunakan kunci yang berbeda dan/atau jenis enkripsi yang berbeda, kolom tersebut akan didekripsi dan kemudian dienkripsi ulang dengan kunci/jenis target yang ditentukan. Enklave VBS saat ini tidak mendukung pengesahan. Parameter EnclaveAttestationProtocol harus diatur ke Tidak Ada dan EnclaveAttestationUrl tidak diperlukan.
# 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
Kolom Dekripsi - Contoh
Contoh berikut menunjukkan cara mendekripsi semua kolom yang saat ini dienkripsi dalam database.
# 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
Mengenkripsi Kolom menggunakan enklave SGX
Contoh di bawah ini menunjukkan pengaturan konfigurasi enkripsi target untuk beberapa kolom. Jika salah satu kolom belum dienkripsi, kolom tersebut akan dienkripsi. Jika ada kolom yang sudah dienkripsi menggunakan kunci yang berbeda dan/atau jenis enkripsi yang berbeda, kolom tersebut akan didekripsi dan kemudian dienkripsi ulang dengan kunci/jenis target yang ditentukan. Untuk memicu operasi kriptografi di tempat menggunakan enklave, parameter EnclaveAttestationProtocol dan EnclaveAttestationUrl diperlukan.
# 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
Kolom Dekripsi - Contoh
Contoh berikut menunjukkan cara mendekripsi semua kolom yang saat ini dienkripsi dalam database.
# 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
Langkah berikutnya
Lihat juga
- Always Encrypted dengan ruang aman
- Mengelola kunci untuk Always Encrypted (Selalu Terenkripsi) dengan enklave yang aman
- Mengonfigurasi enkripsi kolom di tempat dengan Transact-SQL
- Mengonfigurasi enkripsi kolom langsung dengan paket DAC
- Mengonfigurasi enkripsi kolom secara langsung dengan wizard Always Encrypted di SSMS