Membuat kunci konten yang identik di dua server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Topik ini menjelaskan cara membuat kunci konten yang identik pada dua server berbeda di SQL Server dengan menggunakan Transact-SQL. Untuk mendekripsi ciphertext, Anda memerlukan kunci yang digunakan untuk mengenkripsinya. Ketika enkripsi dan dekripsi terjadi dalam satu database, kunci disimpan dalam database dan tersedia, tergantung pada izin, untuk enkripsi dan dekripsi. Tetapi ketika enkripsi dan dekripsi terjadi di database terpisah atau di server terpisah, kunci yang disimpan dalam satu database tidak tersedia untuk digunakan pada database kedua.

Sebelum Anda mulai

Pembatasan dan batasan

  • Ketika kunci konten dibuat, kunci konten harus dienkripsi dengan menggunakan setidaknya salah satu dari yang berikut: sertifikat, kata sandi, kunci konten, kunci asimetris, atau PENYEDIA. Kunci dapat memiliki lebih dari satu enkripsi dari setiap jenis. Dengan kata lain, satu kunci konten dapat dienkripsi dengan menggunakan beberapa sertifikat, kata sandi, kunci konten, dan kunci asimetris secara bersamaan.

  • Ketika kunci konten dienkripsi dengan kata sandi alih-alih kunci publik kunci master database, algoritma enkripsi TRIPLE DES digunakan. Karena itu, kunci yang dibuat dengan algoritma enkripsi yang kuat, seperti AES, sendiri diamankan oleh algoritma yang lebih lemah.

Keamanan

Izin

Memerlukan izin UBAH KUNCI SIMETRIS APA PUN pada database. Jika OTORISASI ditentukan, memerlukan izin IMPERSONATE pada pengguna database atau izin UBAH pada peran aplikasi. Jika enkripsi berdasarkan sertifikat atau kunci asimetris, memerlukan izin LIHAT DEFINISI pada sertifikat atau kunci asimetris. Hanya login Windows, login SQL Server, dan peran aplikasi yang dapat memiliki kunci konten. Grup dan peran tidak dapat memiliki kunci konten.

Menggunakan T-SQL

Untuk membuat kunci simetris yang identik di dua server yang berbeda

  1. Di Object Explorer, sambungkan ke instans Mesin Database.

  2. Pada bilah Standar, klik Kueri Baru.

  3. Buat kunci dengan menjalankan pernyataan CREATE MASTER KEY, CREATE CERTIFICATE, dan CREATE SYMMETRIC KEY berikut.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Sambungkan ke instans server terpisah, buka Jendela Kueri yang berbeda, dan jalankan pernyataan SQL di atas untuk membuat kunci yang sama di server kedua.

  5. Uji kunci dengan terlebih dahulu menjalankan pernyataan OPEN SYMMETRIC KEY dan pernyataan SELECT di bawah ini di server pertama.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. Pada server kedua, tempelkan hasil pernyataan SELECT sebelumnya ke dalam kode berikut sebagai nilai @blob dan jalankan kode berikut untuk memverifikasi bahwa kunci duplikat dapat mendekripsi ciphertext.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Tutup kunci konten di kedua server.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Perubahan enkripsi di SQL Server 2017 CU2

SQL Server 2016 menggunakan algoritma hash SHA1 untuk pekerjaan enkripsinya. Mulai SQL Server 2017, SHA2 digunakan sebagai gantinya. Ini berarti langkah-langkah tambahan mungkin diperlukan agar item dekripsi penginstalan SQL Server 2017 Anda dienkripsi oleh SQL Server 2016. Berikut adalah langkah-langkah tambahan:

  • Pastikan SQL Server 2017 Anda diperbarui ke setidaknya Pembaruan Kumulatif 2 (CU2).
  • Setelah Anda menginstal CU2, aktifkan bendera pelacakan 4631 di SQL Server 2017: DBCC TRACEON(4631, -1);
    • Bendera pelacakan 4631 baru di SQL Server 2017. Bendera pelacakan 4631 harus secara ON global sebelum Anda membuat kunci master, sertifikat, atau kunci simetris di SQL Server 2017. Ini memungkinkan item yang dibuat ini untuk beroperasi dengan SQL Server 2016 dan versi yang lebih lama. Bendera pelacakan ini hanya boleh diaktifkan sementara untuk melakukan enkripsi ulang data dengan kunci turunan SHA2.

Untuk informasi selengkapnya, lihat:

Baca juga