BUAT KUNCI MASTER KOLOM (Transact-SQL)
Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure SQL Managed Instance yang lebih baru
Membuat objek metadata kunci master kolom dalam database. Entri metadata kunci master kolom mewakili kunci, disimpan di penyimpanan kunci eksternal. Kunci melindungi (mengenkripsi) kunci enkripsi kolom saat Anda menggunakan Always Encrypted atau Always Encrypted dengan enklave aman. Beberapa kunci master kolom memungkinkan rotasi kunci berkala untuk meningkatkan keamanan. Buat kunci master kolom di penyimpanan kunci dan objek metadata terkait dalam database dengan menggunakan Object Explorer di SQL Server Management Studio atau PowerShell. Untuk detailnya, lihat Gambaran Umum Manajemen Kunci untuk Always Encrypted.
Penting
Membuat kunci berkemampuan enklave (dengan ENCLAVE_COMPUTATIONS) memerlukan Always Encrypted dengan enklave aman.
Sintaks
CREATE COLUMN MASTER KEY key_name
WITH (
KEY_STORE_PROVIDER_NAME = 'key_store_provider_name',
KEY_PATH = 'key_path'
[,ENCLAVE_COMPUTATIONS (SIGNATURE = signature)]
)
[;]
Argumen
key_name
Nama kunci master kolom dalam database.
key_store_provider_name
Menentukan nama penyedia penyimpanan kunci. Penyedia penyimpanan kunci adalah komponen perangkat lunak sisi klien yang menyimpan penyimpanan kunci yang memiliki kunci master kolom.
Driver klien, diaktifkan dengan Always Encrypted:
- Menggunakan nama penyedia penyimpanan kunci
- Mencari penyedia penyimpanan kunci di registri driver penyedia penyimpanan kunci
Driver kemudian menggunakan penyedia untuk mendekripsi kunci enkripsi kolom. Kunci enkripsi kolom dilindungi oleh kunci master kolom. Kunci master kolom disimpan di penyimpanan kunci yang mendasar. Nilai teks biasa dari kunci enkripsi kolom kemudian digunakan untuk mengenkripsi parameter kueri yang sesuai dengan kolom database terenkripsi. Atau, kunci enkripsi kolom mendekripsi hasil kueri dari kolom terenkripsi.
Pustaka driver klien yang didukung Always Encrypted menyertakan penyedia penyimpanan kunci untuk penyimpanan kunci populer.
Sekumpulan penyedia yang tersedia tergantung pada jenis dan versi driver klien. Lihat dokumentasi Always Encrypted untuk driver tertentu: Mengembangkan aplikasi menggunakan Always Encrypted.
Tabel berikut ini memperlihatkan nama penyedia sistem:
Nama penyedia penyimpanan kunci | Penyimpanan kunci yang mendasar |
---|---|
'MSSQL_CERTIFICATE_STORE' | Penyimpanan Sertifikat Windows |
'MSSQL_CSP_PROVIDER' | Penyimpanan, seperti modul keamanan perangkat keras (HSM), yang mendukung Microsoft CryptoAPI. |
'MSSQL_CNG_STORE' | Penyimpanan, seperti modul keamanan perangkat keras (HSM), yang mendukung API Kriptografi: Generasi Berikutnya. |
'AZURE_KEY_VAULT' | Lihat Memulai Azure Key Vault |
'MSSQL_JAVA_KEYSTORE' | Penyimpanan Kunci Java.} |
Di driver klien yang didukung Always Encrypted, Anda dapat menyiapkan penyedia penyimpanan kunci kustom yang menyimpan kunci master kolom yang tidak ada penyedia penyimpanan kunci bawaan. Nama penyedia penyimpanan kunci kustom tidak dapat dimulai dengan 'MSSQL_', yang merupakan awalan yang dicadangkan untuk penyedia penyimpanan kunci Microsoft.
key_path
Jalur kunci di penyimpanan kunci master kolom. Jalur kunci harus valid untuk setiap aplikasi klien yang diharapkan untuk mengenkripsi atau mendekripsi data. Data disimpan dalam kolom yang (tidak langsung) dilindungi oleh kunci master kolom yang direferensikan. Aplikasi klien harus memiliki akses ke kunci. Format jalur kunci khusus untuk penyedia penyimpanan kunci. Daftar berikut menjelaskan format jalur kunci untuk penyedia penyimpanan kunci sistem Microsoft tertentu.
Nama penyedia: MSSQL_CERTIFICATE_STORE
Format jalur kunci: CertificateStoreName/CertificateStoreLocation/CertificateThumbprint
Mana:
CertificateStoreLocation
Lokasi penyimpanan sertifikat, yang harus Pengguna Saat Ini atau Komputer Lokal. Untuk informasi selengkapnya, lihat Komputer Lokal dan Penyimpanan Sertifikat Pengguna Saat Ini.CertificateStore
Nama penyimpanan sertifikat, misalnya 'Saya'.CertificateThumbprint
Thumbprint sertifikat.Contoh:
N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94' N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'
Nama penyedia: MSSQL_CSP_PROVIDER
Format jalur kunci: ProviderName/KeyIdentifier
Mana:
ProviderName
Nama Penyedia Layanan Kriptografi (CSP), yang mengimplementasikan CAPI, untuk penyimpanan kunci master kolom. Jika Anda menggunakan HSM sebagai penyimpanan kunci, nama penyedia harus menjadi nama CSP yang disediakan vendor HSM Anda. Penyedia harus diinstal pada komputer klien.KeyIdentifier
Pengidentifikasi kunci, digunakan sebagai kunci master kolom, di penyimpanan kunci.Contoh:
N'My HSM CSP Provider/AlwaysEncryptedKey1'
Nama penyedia: MSSQL_CNG_STORE
Format jalur kunci: ProviderName/KeyIdentifier
Mana:
ProviderName
Nama Penyedia Penyimpanan Kunci (KSP), yang mengimplementasikan Cryptography: Next Generation (CNG) API, untuk penyimpanan kunci master kolom. Jika Anda menggunakan HSM sebagai penyimpanan kunci, nama penyedia harus menjadi nama KSP yang disediakan vendor HSM Anda. Penyedia harus diinstal pada komputer klien.KeyIdentifier
Pengidentifikasi kunci, digunakan sebagai kunci master kolom, di penyimpanan kunci.Contoh:
N'My HSM CNG Provider/AlwaysEncryptedKey1'
Nama penyedia: AZURE_KEY_STORE
Format jalur kunci: KeyUrl
Mana:
KeyUrl
URL kunci di Azure Key Vault
ENCLAVE_COMPUTATIONS
Menentukan bahwa kunci master kolom diaktifkan enklave. Anda dapat berbagi semua kunci enkripsi kolom, dienkripsi dengan kunci master kolom, dengan enklave aman sisi server dan menggunakannya untuk komputasi di dalam enklave. Untuk informasi selengkapnya, lihat Always Encrypted dengan enklave aman.
tanda tangan
Literal biner yang merupakan hasil dari jalur kunci penandatanganan digital dan pengaturan ENCLAVE_COMPUTATIONS dengan kunci master kolom. Tanda tangan mencerminkan apakah ENCLAVE_COMPUTATIONS ditentukan atau tidak. Tanda tangan melindungi nilai yang ditandatangani agar tidak diubah oleh pengguna yang tidak sah. Driver klien yang didukung Always Encrypted memverifikasi tanda tangan dan mengembalikan kesalahan ke aplikasi jika tanda tangan tidak valid. Tanda tangan harus dibuat menggunakan alat sisi klien. Untuk informasi selengkapnya, lihat Always Encrypted dengan enklave aman.
Keterangan
Buat entri metadata kunci master kolom sebelum Anda membuat entri metadata kunci enkripsi kolom di database dan sebelum kolom apa pun dalam database dapat dienkripsi menggunakan Always Encrypted. Entri kunci master kolom dalam metadata tidak berisi kunci master kolom aktual. Kunci master kolom harus disimpan di penyimpanan kunci kolom eksternal (di luar SQL Server). Nama penyedia penyimpanan kunci dan jalur kunci master kolom dalam metadata harus valid untuk aplikasi klien. Aplikasi klien perlu menggunakan kunci master kolom untuk mendekripsi kunci enkripsi kolom. Kunci enkripsi kolom dienkripsi dengan kunci master kolom. Aplikasi klien juga perlu mengkueri kolom terenkripsi.
Disarankan agar Anda menggunakan alat, seperti SQL Server Management Studio (SSMS) atau PowerShell untuk mengelola kunci master kolom. Alat tersebut menghasilkan tanda tangan (jika Anda menggunakan Always Encrypted dengan enklave aman) dan secara otomatis mengeluarkan CREATE COLUMN MASTER KEY
pernyataan untuk membuat objek metadata kunci enkripsi kolom. Lihat Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio dan Menyediakan kunci Always Encrypted menggunakan PowerShell.
Izin
Memerlukan izin UBAH KUNCI MASTER KOLOM APA PUN.
Contoh
J. Membuat kunci master kolom
Contoh berikut membuat entri metadata kunci master kolom untuk kunci master kolom. Kunci master kolom disimpan di Penyimpanan Sertifikat untuk aplikasi klien yang menggunakan penyedia MSSQL_CERTIFICATE_STORE untuk mengakses kunci master kolom:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'
);
Buat entri metadata kunci master kolom untuk kunci master kolom. Aplikasi klien, yang menggunakan penyedia MSSQL_CNG_STORE, mengakses kunci master kolom:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = N'MSSQL_CNG_STORE',
KEY_PATH = N'My HSM CNG Provider/AlwaysEncryptedKey'
);
Buat entri metadata kunci master kolom untuk kunci master kolom. Kunci master kolom disimpan di Azure Key Vault, untuk aplikasi klien yang menggunakan penyedia AZURE_KEY_VAULT, untuk mengakses kunci master kolom.
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
KEY_PATH = N'https://myvault.vault.azure.net:443/keys/
MyCMK/4c05f1a41b12488f9cba2ea964b6a700');
Buat entri metadata kunci master kolom untuk kunci master kolom. Kunci master kolom disimpan di penyimpanan kunci master kolom kustom:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = 'CUSTOM_KEY_STORE',
KEY_PATH = 'https://contoso.vault/sales_db_tce_key'
);
B. Membuat kunci master kolom yang diaktifkan enklave
Contoh berikut membuat entri metadata kunci master kolom untuk kunci master kolom yang diaktifkan enklave. Kunci master kolom dengan dukungan enklave disimpan di Penyimpanan Sertifikat, untuk aplikasi klien yang menggunakan penyedia MSSQL_CERTIFICATE_STORE untuk mengakses kunci master kolom:
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'
ENCLAVE_COMPUTATIONS (SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020542419990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
);
Buat entri metadata kunci master kolom untuk kunci master kolom yang diaktifkan enklave. Kunci master kolom yang mendukung enklave disimpan di Azure Key Vault, untuk aplikasi klien yang menggunakan penyedia AZURE_KEY_VAULT, untuk mengakses kunci master kolom.
CREATE COLUMN MASTER KEY MyCMK
WITH (
KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
KEY_PATH = N'https://myvault.vault.azure.net:443/keys/MyCMK/4c05f1a41b12488f9cba2ea964b6a700',
ENCLAVE_COMPUTATIONS(SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020582413990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
);