BUAT KUNCI MASTER KOLOM (Transact-SQL)

Berlaku untuk: SQL Server 2016 (13.x) dan database Azure SQL yang lebih baru Azure SQL Managed Instance

Membuat objek metadata kunci master kolom dalam database. Entri metadata kunci master kolom mewakili kunci, yang 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.

Konvensi sintaks Transact-SQL

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 mencakup 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 Mulai menggunakan 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 bawaannya. Nama penyedia penyimpanan kunci kustom tidak dapat dimulai dengan 'MSSQL_', yang merupakan awalan yang disediakan 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

    Di 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

    Di 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

    Di mana:

    ProviderName
    Nama Penyedia Penyimpanan Utama (KSP), yang mengimplementasikan API Kriptografi: Generasi Berikutnya (CNG), 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

    Di 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 diaktifkan 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 dalam 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 kunci SQL Server Management Studio dan Provisi Always Encrypted menggunakan PowerShell.

Izin

Memerlukan izin UBAH KUNCI MASTER KOLOM APA PUN .

Contoh

A. 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 berkemampuan enklave

Contoh berikut membuat entri metadata kunci master kolom untuk kunci master kolom yang diaktifkan enklave. Kunci master kolom berkemampuan 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 berkemampuan enklave. Kunci master kolom berkemampuan 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)
);

Lihat juga