Muat massal data terenkripsi ke kolom menggunakan Always Encrypted
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Untuk memuat data terenkripsi tanpa melakukan pemeriksaan metadata di server selama operasi penyalinan massal, buat pengguna dengan opsi ALLOW_ENCRYPTED_VALUE_MODIFICATIONS . Opsi ini dimaksudkan untuk digunakan oleh alat warisan atau alur kerja Extract-Transform-Load (ETL) pihak ketiga yang tidak dapat menggunakan Always Encrypted. Ini memungkinkan pengguna untuk memindahkan data terenkripsi dengan aman dari satu set tabel, yang berisi kolom terenkripsi, ke kumpulan tabel lain dengan kolom terenkripsi (dalam database yang sama atau berbeda).
Opsi ALLOW_ENCRYPTED_VALUE_MODIFICATIONS
CREATE USER dan ALTER USER memiliki opsi ALLOW_ENCRYPTED_VALUE_MODIFICATIONS. Ketika diatur ke AKTIF (defaultnya NONAKTIF), opsi ini menekan pemeriksaan metadata kriptografi pada server dalam operasi penyalinan massal, yang memungkinkan pengguna menyalin data terenkripsi secara massal antara tabel atau database, tanpa mendekripsi data.
Skenario Migrasi Data
Tabel berikut ini memperlihatkan pengaturan yang direkomendasikan yang sesuai untuk beberapa skenario migrasi.
Pemuatan Massal Data Terenkripsi
Gunakan proses berikut untuk memuat data terenkripsi.
- Atur opsi ke AKTIF untuk pengguna dalam database yang merupakan target untuk operasi penyalinan massal. Contohnya:
ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
Jalankan aplikasi atau alat salin massal Anda yang terhubung sebagai pengguna tersebut. (Jika aplikasi Anda menggunakan driver klien yang diaktifkan Always Encrypted, pastikan string koneksi untuk sumber data tidak berisi pengaturan enkripsi kolom=diaktifkan untuk memastikan data yang diambil dari kolom terenkripsi tetap dienkripsi. Untuk informasi selengkapnya, lihat Mengembangkan Aplikasi menggunakan Always Encrypted.)
Atur opsi ALLOW_ENCRYPTED_VALUE_MODIFICATIONS kembali ke NONAKTIF. Contohnya:
ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
Potensi Kerusakan Data
Penggunaan opsi ini yang tidak tepat dapat menyebabkan kerusakan data. Opsi ALLOW_ENCRYPTED_VALUE_MODIFICATIONS memungkinkan pengguna untuk menyisipkan data apa pun ke dalam kolom terenkripsi dalam database, termasuk data yang dienkripsi dengan kunci yang berbeda, dienkripsi dengan salah, atau tidak dienkripsi sama sekali. Jika pengguna secara tidak sengaja menyalin data yang tidak dienkripsi dengan benar menggunakan skema enkripsi (kunci enkripsi kolom, algoritma, jenis enkripsi) yang disiapkan untuk kolom target, Anda tidak akan dapat mendekripsi data (data akan rusak). Opsi ini harus digunakan dengan hati-hati, karena dapat menyebabkan data yang rusak dalam database.
Skenario berikut menunjukkan bagaimana mengimpor data secara tidak benar dapat menyebabkan kerusakan data:
Opsi diatur ke AKTIF untuk pengguna.
Pengguna menjalankan aplikasi yang tersambung ke database. Aplikasi ini menggunakan API massal untuk menyisipkan nilai teks biasa ke kolom terenkripsi. Aplikasi mengharapkan driver klien yang didukung Always Encrypted untuk mengenkripsi data saat disisipkan. Namun, aplikasi salah dikonfigurasi, sehingga akhirnya menggunakan driver yang tidak mendukung Always Encrypted atau string koneksi tidak berisi pengaturan enkripsi kolom=diaktifkan.
Aplikasi mengirimkan nilai teks biasa ke server. Karena pemeriksaan metadata kriptografi dinonaktifkan di server untuk pengguna, server memungkinkan data yang salah (teks biasa alih-alih ciphertext terenkripsi dengan benar) untuk dimasukkan ke dalam kolom terenkripsi.
Aplikasi yang sama atau lain tersambung ke database menggunakan driver yang didukung Always Encrypted dan dengan pengaturan enkripsi kolom=diaktifkan di string koneksi, dan mengambil data. Aplikasi mengharapkan data didekripsi secara transparan. Namun, driver gagal mendekripsi data karena data salah ciphertext.
Praktik terbaik
Gunakan akun pengguna yang ditunjuk untuk beban kerja yang berjalan lama menggunakan opsi ini.
Untuk aplikasi atau alat salin massal yang berjalan singkat yang perlu memindahkan data terenkripsi tanpa mendekripsinya, atur opsi ke AKTIF segera sebelum menjalankan aplikasi dan atur kembali ke NONAKTIF segera setelah menjalankan operasi.
Jangan gunakan opsi ini untuk mengembangkan aplikasi baru. Sebagai gantinya, gunakan driver klien yang menawarkan API untuk menekan pemeriksaan metadata kriptografi untuk satu sesi, seperti opsi AllowEncryptedValueModifications di Penyedia Data .NET Framework untuk SQL Server - lihat Menyalin Data Terenkripsi menggunakan SqlBulkCopy.
Langkah berikutnya
- Kolom kueri menggunakan Always Encrypted dengan SQL Server Management Studio
- Mengembangkan aplikasi menggunakan Always Encrypted