Always Encrypted

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Diagram of Always Encrypted.

Always Encrypted adalah fitur yang dirancang untuk melindungi data sensitif, seperti nomor kartu kredit atau nomor identifikasi nasional/regional (misalnya, nomor jaminan sosial AS), yang disimpan di Database Azure SQL, Azure SQL Managed Instance, dan database SQL Server. Always Encrypted memungkinkan klien mengenkripsi data sensitif di dalam aplikasi klien dan tidak pernah mengungkapkan kunci enkripsi ke Mesin Database. Ini menyediakan pemisahan antara mereka yang memiliki data dan dapat melihatnya, dan mereka yang mengelola data tetapi tidak boleh memiliki akses - administrator database lokal, operator database cloud, atau pengguna tidak sah dengan hak istimewa tinggi lainnya. Akibatnya, Always Encrypted memungkinkan pelanggan untuk menyimpan data sensitif mereka dengan percaya diri di cloud, dan untuk mengurangi kemungkinan pencurian data oleh orang dalam yang berbahaya.

Always Encrypted dapat dikonfigurasi untuk mendukung kueri rahasia terbatas pada data terenkripsi, kueri yang melibatkan perbandingan kesetaraan. Misalnya, pencarian titik atau gabungan kesetaraan. Kueri tersebut memanfaatkan enkripsi deterministik.

Catatan

Enklave aman memperluas kemampuan komputasi rahasia Always Encrypted dengan pencocokan pola, operator perbandingan lainnya, dan enkripsi di tempat. Untuk informasi selengkapnya, lihat Always Encrypted dengan enklave aman.

Always Encrypted membuat enkripsi transparan terhadap aplikasi. Driver yang didukung Always Encrypted yang diinstal pada komputer klien mencapai hal ini dengan mengenkripsi dan mendekripsi data sensitif dalam aplikasi klien secara otomatis. Driver mengenkripsi data dalam kolom sensitif sebelum meneruskan data ke Mesin Database, dan secara otomatis menulis ulang kueri sehingga semantik ke aplikasi dipertahankan. Demikian pula, driver secara transparan mendekripsi data, disimpan dalam kolom database terenkripsi, yang berada dalam hasil kueri.

Gunakan Always Encrypted

Bagian ini menyediakan gambaran umum tentang menyiapkan Always Encrypted. Untuk detail dan untuk memulai, lihat Tutorial: Mulai menggunakan Always Encrypted.

Untuk menyiapkan Always Encrypted di database Anda, Anda perlu:

  1. Provisikan kunci kriptografi untuk melindungi data Anda. Always Encrypted menggunakan dua jenis kunci:

    • Kunci enkripsi kolom.
    • Kunci master kolom.

    Kunci enkripsi kolom digunakan untuk mengenkripsi data dalam kolom terenkripsi. Kunci master kolom adalah kunci pelindung kunci yang mengenkripsi satu atau beberapa kunci enkripsi kolom.

    Anda perlu menyimpan kunci master kolom di penyimpanan kunci tepercaya di luar sistem database, seperti Azure Key Vault, penyimpanan sertifikat Windows, atau modul keamanan perangkat keras.

    Kemudian, Anda memerlukan kunci enkripsi kolom provisi dan mengenkripsi masing-masing dengan kunci master kolom.

    Terakhir, Anda perlu menyimpan metadata tentang kunci dalam database Anda.

    • Metadata kunci master kolom mengambil lokasi kunci master kolom.
    • Metadata kunci enkripsi kolom berisi nilai terenkripsi kunci enkripsi kolom. Mesin Database tidak pernah menyimpan atau menggunakan kunci dari salah satu jenis teks biasa.

    Untuk informasi selengkapnya tentang mengelola kunci Always Encrypted, lihat Gambaran Umum manajemen kunci untuk Always Encrypted

  2. Konfigurasikan enkripsi untuk kolom database yang dipilih yang berisi data sensitif yang akan dilindungi. Ini dapat melibatkan pembuatan tabel baru dengan kolom terenkripsi atau mengenkripsi kolom database yang sudah ada dan data yang sudah ada. Saat menyiapkan enkripsi untuk kolom, Anda menentukan informasi tentang algoritma enkripsi, kunci enkripsi kolom untuk melindungi data di kolom, dan jenis enkripsi. Always Encrypted mendukung dua jenis enkripsi:

    • Enkripsi deterministik selalu menghasilkan nilai terenkripsi yang sama untuk nilai teks biasa tertentu. Menggunakan enkripsi deterministik memungkinkan Anda untuk melakukan pencarian titik, penggabungan kesetaraan, pengelompokan, dan pengindeksan pada kolom terenkripsi. Namun, mungkin juga memungkinkan pengguna yang tidak sah untuk menebak informasi tentang nilai terenkripsi dengan memeriksa pola di kolom terenkripsi, terutama jika ada serangkaian kecil kemungkinan nilai terenkripsi, seperti True/False, atau wilayah Utara/Selatan/Timur/Barat.

    • Enkripsi acak menggunakan metode yang mengenkripsi data dengan cara yang kurang dapat diprediksi. Enkripsi acak lebih aman, tetapi enkripsi ini mencegah pencarian, pengelompokan, pengindeksan, dan penggabungan pada kolom terenkripsi.

    Gunakan enkripsi deterministik untuk kolom yang akan digunakan sebagai parameter pencarian atau pengelompokan. Misalnya, nomor ID pemerintah. Gunakan enkripsi acak untuk data seperti komentar investigasi rahasia, yang tidak dikelompokkan dengan rekaman lain dan tidak digunakan untuk menggabungkan tabel.

Untuk detail tentang algoritma kriptografi Always Encrypted, lihat Kriptografi Always Encrypted.

Anda dapat melakukan langkah-langkah di atas menggunakan alat SQL:

Untuk memastikan kunci Always Encrypted dan data sensitif yang dilindungi tidak pernah terungkap dalam teks biasa ke lingkungan database, Mesin Database tidak dapat terlibat dalam provisi kunci dan enkripsi data, atau operasi dekripsi. Oleh karena itu, Transact-SQL (T-SQL) tidak mendukung provisi kunci atau operasi kriptografi. Untuk alasan yang sama, mengenkripsi data yang ada atau mengenkripsi ulang (dengan jenis enkripsi yang berbeda atau kunci enkripsi kolom) perlu dilakukan di luar database (alat SQL dapat mengotomatiskannya).

Catatan

Always Encrypted dengan enklave aman mengangkat beberapa batasan di atas dengan mengizinkan operasi kriptografi pada data yang ada menggunakan T-SQL, dan menghilangkan kebutuhan untuk memindahkan data ke luar database.

Cara kerja kueri terhadap kolom terenkripsi

Untuk menjalankan kueri pada kolom database terenkripsi, sisipkan data ke kolom terenkripsi, ambil nilai teks biasa dari kolom terenkripsi, atau lakukan operasi yang didukung (misalnya, pencarian titik) pada kolom menggunakan enkripsi deterministik, pengguna atau aplikasi yang mengeluarkan kueri harus memenuhi prasyarat berikut:

  • Memiliki akses ke kunci master kolom yang melindungi data. Akses kunci diperlukan selain izin tingkat database, seperti SELECT pada tabel yang berisi data.
  • Koneksi ke database dengan Always Encrypted diaktifkan dalam koneksi database. Sebagian besar alat SQL dan driver klien SQL mendukung pengaktifan Always Encrypted untuk koneksi database.

Catatan

Jika pengguna memiliki izin database yang diperlukan untuk membaca data, tetapi tidak ada akses ke kunci yang melindunginya, pengguna masih dapat mengambil data cyphertext (terenkripsi) dengan menyambungkan ke database tanpa mengaktifkan Always Encrypted dalam koneksi database.

Berikut cara kerja kueri pada kolom terenkripsi:

  1. Ketika aplikasi mengeluarkan kueri berparameter, driver klien SQL dalam aplikasi secara transparan menghubungi Mesin Database (dengan memanggil sp_describe_parameter_encryption (Transact-SQL) untuk menentukan parameter mana yang menargetkan kolom terenkripsi dan harus dienkripsi. Untuk setiap parameter yang perlu dienkripsi, driver menerima algoritma enkripsi, jenis enkripsi, dan metadata kunci, termasuk kunci enkripsi kolom terenkripsi dan lokasi kunci master kolom yang sesuai.
  2. Driver memanggil penyimpanan kunci, yang berisi kunci master kolom untuk mendekripsi nilai kunci enkripsi kolom terenkripsi. Kunci enkripsi kolom teks biasa yang dihasilkan di-cache untuk mengurangi jumlah perjalanan pulang pergi ke penyimpanan kunci pada penggunaan berikutnya dari kunci enkripsi kolom yang sama.
  3. Driver menggunakan kunci enkripsi kolom teks biasa yang diperoleh untuk mengenkripsi parameter kueri yang sesuai dengan kolom terenkripsi.
  4. Driver menggantikan nilai teks biasa dari parameter yang menargetkan kolom terenkripsi dengan nilai terenkripsinya, dan mengirimkan kueri ke Mesin Database untuk diproses.
  5. Mesin Database menjalankan kueri, yang mungkin melibatkan perbandingan kesetaraan pada kolom menggunakan enkripsi deterministik.
  6. Jika hasil kueri menyertakan data dari kolom terenkripsi, Mesin Database melampirkan metadata enkripsi untuk setiap kolom, termasuk informasi tentang algoritma enkripsi, jenis enkripsi, dan metadata kunci ke kumpulan hasil.
  7. Mesin Database mengirimkan hasil yang diatur ke aplikasi klien.
  8. Untuk setiap kolom terenkripsi dalam kumpulan hasil yang diterima, driver pertama-tama mencoba menemukan kunci enkripsi kolom teks biasa di cache lokal, dan hanya melakukan perjalanan pulang pergi ke penyimpanan kunci yang memegang kunci master kolom jika tidak dapat menemukan kunci di cache.
  9. Driver mendekripsi hasil dan mengembalikan nilai teks biasa ke aplikasi.

Driver klien berinteraksi dengan penyimpanan kunci, yang berisi kunci master kolom, menggunakan penyedia penyimpanan kunci master kolom, yang merupakan komponen perangkat lunak sisi klien yang merangkum penyimpanan kunci yang berisi kunci master kolom. Penyedia untuk jenis penyimpanan kunci umum tersedia di pustaka driver sisi klien dari Microsoft, atau sebagai unduhan mandiri. Anda juga dapat menerapkan penyedia Anda sendiri. Kemampuan Always Encrypted, termasuk penyedia penyimpanan kunci master kolom bawaan bervariasi menurut pustaka driver dan versinya.

Lihat Mengembangkan aplikasi menggunakan Always Encrypted untuk daftar driver klien yang mendukung Always Encrypted dan untuk informasi tentang cara mengembangkan aplikasi yang mengkueri kolom terenkripsi.

Anda juga dapat mengkueri kolom terenkripsi menggunakan alat SQL, misalnya Azure Data Studio atau SSMS.

Batasan

Batasan berikut berlaku untuk kueri pada kolom terenkripsi:

  • Enkripsi deterministik mendukung operasi berikut yang melibatkan perbandingan kesetaraan - tidak ada operasi lain yang diizinkan.

  • Tidak ada komputasi pada kolom yang dienkripsi menggunakan enkripsi acak yang diizinkan.

    Catatan

    Always Encrypted dengan enklave aman melonggarkan pembatasan di atas dengan memungkinkan pencocokan pola, operator perbandingan, pengurutan, dan pengindeksan pada kolom menggunakan enkripsi acak.

  • Pernyataan kueri yang memicu komputasi yang melibatkan data teks biasa dan terenkripsi tidak diizinkan. Contohnya:

    • Membandingkan kolom terenkripsi dengan kolom teks biasa atau harfiah.
    • Menyalin data dari kolom teks biasa ke kolom terenkripsi (atau sebaliknya) UPDATE, BULK INSERT, SELECT INTO, atau INSERT.. PILIH.
    • Menyisipkan literal ke kolom terenkripsi.

    Pernyataan tersebut mengakibatkan kesalahan bentrokan operand seperti ini:

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    
  • Aplikasi harus menggunakan parameter kueri untuk meneruskan nilai yang sesuai dengan kolom terenkripsi. Misalnya, saat menyisipkan data ke kolom terenkripsi atau memfilter menurut kolom terenkripsi (saat menggunakan enkripsi deterministik). Meneruskan literal atau variabel T-SQL yang sesuai dengan kolom terenkripsi tidak didukung. Untuk informasi selengkapnya khusus untuk driver klien yang Anda gunakan, lihat Mengembangkan aplikasi menggunakan Always Encrypted.

  • Anda harus menggunakan Parameterisasi untuk variabel Always Encrypted di Azure Data Studio atau SSMS untuk mengeluarkan kueri yang meneruskan nilai yang sesuai dengan kolom terenkripsi di alat ini. Misalnya, saat menyisipkan data ke kolom terenkripsi atau memfilter menurut kolom terenkripsi (saat menggunakan enkripsi deterministik).

  • Parameter bernilai tabel yang menargetkan kolom terenkripsi tidak didukung.

  • Kueri yang menggunakan klausul berikut ini tidak didukung:

  • Setelah mengubah definisi kolom terenkripsi, jalankan sp_refresh_parameter_encryption untuk memperbarui metadata Always Encrypted untuk objek.

  • Always Encrypted tidak didukung untuk kolom dengan karakteristik di bawah ini:

    • Kolom yang menggunakan salah satu jenis data berikut: xml, tanda waktu, rowversion, gambar, ntext, teks, sql_variant, hierarkiid, geografi, geometri, alias, jenis yang ditentukan pengguna.
    • Kolom FILESTREAM
    • Kolom dengan properti IDENTITY .
    • Kolom dengan properti ROWGUIDCOL .
    • Kolom string (varchar, char, dll.) dengan kolase selain kolase titik kode biner (_BIN2) saat menggunakan enkripsi deterministik.
    • Kolom yang merupakan kunci untuk indeks berkluster dan non-kluster saat menggunakan enkripsi acak (indeks pada kolom yang menggunakan enkripsi deterministik didukung).
    • Kolom yang disertakan dalam indeks teks lengkap (Always Encrypted tidak mendukung Pencarian Teks Lengkap).
    • Kolom komputasi.
    • Kolom yang direferensikan oleh kolom komputasi (saat ekspresi melakukan operasi yang tidak didukung untuk Always Encrypted).
    • Kumpulan kolom jarang.
    • Kolom yang direferensikan oleh statistik saat menggunakan enkripsi acak (enkripsi deterministik didukung).
    • Kolom partisi.
    • Kolom dengan batasan default.
    • Kolom yang direferensikan oleh batasan unik saat menggunakan enkripsi acak (enkripsi deterministik didukung).
    • Kolom kunci primer saat menggunakan enkripsi acak (enkripsi deterministik didukung).
    • Mereferensikan kolom dalam batasan kunci asing saat menggunakan enkripsi acak atau saat menggunakan enkripsi deterministik, jika kolom referensi dan referensi menggunakan kunci atau algoritma yang berbeda.
    • Kolom yang dirujuk oleh batasan pemeriksaan.
    • Kolom yang diambil/dilacak menggunakan tangkapan data perubahan.
    • Kolom kunci utama pada tabel yang memiliki pelacakan perubahan.
    • Kolom yang diselubungi (menggunakan Masking Data Dinamis).
    • Kolom dalam tabel database stretch. (Tabel dengan kolom yang dienkripsi dengan Always Encrypted dapat diaktifkan untuk Stretch.)

    Penting

    Stretch Database tidak digunakan lagi di SQL Server 2022 (16.x) dan Azure SQL Database. Fitur ini akan dihapus dalam versi Mesin Database di masa mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

    • Kolom dalam tabel eksternal (PolyBase) (catatan: menggunakan tabel dan tabel eksternal dengan kolom terenkripsi dalam kueri yang sama didukung).
  • Fitur berikut ini tidak berfungsi pada kolom terenkripsi:

Referensi Always Encrypted Transact-SQL

Always Encrypted menggunakan pernyataan Transact-SQL berikut, tampilan katalog sistem, prosedur dan izin tersimpan sistem.

Pernyataan

Tampilan katalog sistem dan prosedur tersimpan

Lihat juga sys.columns (Transact-SQL) untuk informasi tentang metadata enkripsi yang disimpan untuk setiap kolom.

Izin database

Ada empat izin database untuk Always Encrypted:

  • UBAH KUNCI MASTER KOLOM APA PUN - diperlukan untuk membuat dan menghapus metadata kunci master kolom.

  • UBAH KUNCI ENKRIPSI KOLOM APA PUN - diperlukan untuk membuat dan menghapus metadata kunci enkripsi kolom.

  • LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN - diperlukan untuk mengakses dan membaca metadata kunci master kolom, yang diperlukan untuk mengkueri kolom terenkripsi.

  • LIHAT DEFINISI KUNCI ENKRIPSI KOLOM APA PUN - diperlukan untuk mengakses dan membaca metadata kunci master kolom, yang diperlukan untuk mengkueri kolom terenkripsi.

Tabel berikut ini meringkas izin yang diperlukan untuk tindakan umum.

Skenario MENGUBAH KUNCI MASTER KOLOM APA PUN MENGUBAH KUNCI ENKRIPSI KOLOM APA PUN LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN LIHAT DEFINISI KUNCI ENKRIPSI KOLOM APA PUN
Manajemen kunci (membuat/mengubah/meninjau metadata kunci dalam database) X X X X
Mengkueri kolom terenkripsi X X

Pertimbangan penting

  • Izin LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN dan LIHAT DEFINISI KUNCI ENKRIPSI KOLOM DIPERLUKAN saat memilih kolom terenkripsi, bahkan jika pengguna tidak memiliki izin ke kunci master kolom (di penyimpanan kunci mereka), melindungi kolom dan tidak mengakses upaya teks biasa.

  • Di SQL Server, izin LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN dan LIHAT DEFINISI KUNCI ENKRIPSI KOLOM apa pun diberikan secara default ke peran database tetap publik . Administrator database dapat memilih untuk mencabut (atau menolak) izin ke peran publik dan memberi mereka peran atau pengguna tertentu untuk menerapkan kontrol yang lebih terbatas.

  • Di SQL Database, izin LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN dan LIHAT DEFINISI KUNCI ENKRIPSI KOLOM APA PUN tidak diberikan secara default ke peran database tetap publik . Ini memungkinkan alat warisan tertentu yang ada (menggunakan versi DacFx yang lebih lama) berfungsi dengan baik. Akibatnya, untuk bekerja dengan kolom terenkripsi (bahkan jika tidak mendekripsinya) administrator database harus secara eksplisit memberikan izin LIHAT DEFINISI KUNCI MASTER KOLOM APA PUN dan LIHAT DEFINISI KUNCI ENKRIPSI KOLOM APA PUN.

Langkah berikutnya

Baca juga