Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Always Encrypted dan Always Encrypted dengan enklave aman adalah fitur yang dirancang untuk melindungi informasi sensitif, termasuk nomor kartu kredit dan nomor identifikasi nasional atau regional (seperti nomor jaminan sosial AS), di Azure SQL Database, Azure SQL Managed Instance, dan database SQL Server. Anda dapat mengenkripsi data sensitif dalam aplikasi klien, memastikan bahwa kunci enkripsi tidak pernah terekspos ke Mesin Database. Pendekatan 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 aman di cloud, mengurangi risiko pencurian data oleh orang dalam yang berbahaya.
Always Encrypted memiliki batasan tertentu, seperti ketidakmampuan untuk melakukan operasi pada data terenkripsi, termasuk pengurutan dan pemfilteran (kecuali untuk pencarian titik menggunakan enkripsi deterministik). Batasan ini berarti bahwa beberapa kueri dan aplikasi mungkin tidak kompatibel dengan Always Encrypted atau mungkin memerlukan perubahan signifikan pada logika aplikasi.
Untuk mengatasi batasan ini, Always Encrypted dengan enklave aman memungkinkan mesin database memproses data terenkripsi dalam area memori yang dilindungi yang disebut enklave aman. Enklave aman meningkatkan kemampuan komputasi rahasia Always Encrypted dengan mendukung pencocokan pola, berbagai operator perbandingan, dan enkripsi di tempat.
Always Encrypted memastikan bahwa enkripsi mulus untuk aplikasi. Pada klien, driver yang didukung Always Encrypted mengenkripsi data sensitif sebelum mengirimkannya ke Mesin Database dan secara otomatis menulis ulang kueri untuk mempertahankan semantik aplikasi. Ini juga secara otomatis mendekripsi hasil kueri dari kolom database terenkripsi.
Gunakan Always Encrypted
Catatan
Untuk aplikasi yang perlu melakukan pencocokan pola, gunakan operator perbandingan, urutkan, dan indeks pada kolom terenkripsi, terapkan Always Encrypted dengan enklave aman.
Bagian ini menyediakan gambaran umum tentang menyiapkan Always Encrypted. Untuk detail dan untuk memulai, lihat Tutorial: Mulai menggunakan Always Encrypted.
Untuk mengonfigurasi Always Encrypted di database Anda, ikuti langkah-langkah berikut:
Provisikan kunci kriptografi untuk melindungi data Anda. Always Encrypted menggunakan dua jenis kunci:
- Kunci enkripsi kolom.
- Kunci master kolom.
Kunci enkripsi kolom mengenkripsi data dalam kolom terenkripsi. Kunci master kolom adalah kunci pelindung kunci yang mengenkripsi satu atau beberapa kunci enkripsi kolom.
Simpan kunci master kolom di penyimpanan kunci tepercaya di luar sistem database, seperti Azure Key Vault, penyimpanan sertifikat Windows, atau modul keamanan perangkat keras. Setelah langkah ini, sediakan kunci enkripsi kolom dan enkripsi setiap kunci dengan kunci induk kolom.
Terakhir, simpan metadata tentang kunci di database Anda. Metadata kunci master kolom menyertakan lokasi kunci master kolom. Metadata kunci enkripsi kolom berisi nilai terenkripsi kunci enkripsi kolom. Mesin Database tidak menyimpan atau menggunakan kunci apa pun dalam teks biasa.
Untuk informasi selengkapnya tentang mengelola kunci Always Encrypted, lihat Gambaran umum manajemen kunci untuk Always Encrypted.
Siapkan enkripsi untuk kolom database tertentu yang menyertakan informasi sensitif untuk memastikan perlindungan. Langkah ini mungkin memerlukan pembuatan tabel baru dengan kolom terenkripsi atau mengenkripsi kolom dan data yang ada. Saat mengonfigurasi enkripsi untuk kolom, tentukan detail tentang algoritma enkripsi, kunci enkripsi kolom untuk melindungi data, dan jenis enkripsi. Always Encrypted mendukung dua jenis enkripsi:
Enkripsi deterministik selalu menghasilkan nilai terenkripsi yang sama untuk nilai teks biasa tertentu. Dengan menggunakan enkripsi deterministik, Anda dapat melakukan pencarian titik, gabungan kesetaraan, pengelompokan, dan pengindeksan pada kolom terenkripsi. Namun, pengguna yang tidak sah mungkin 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 secara tidak terduga. Setiap input teks biasa yang identik menghasilkan output terenkripsi yang berbeda. Metode ini meningkatkan keamanan enkripsi acak.
Untuk melakukan pencocokan pola dengan menggunakan operator perbandingan, pengurutan, dan pengindeksan pada kolom terenkripsi, adopsi Always Encrypted dengan enklave aman dan terapkan enkripsi acak. Enkripsi acak Always Encrypted (tanpa enklave aman) tidak mendukung pencarian, pengelompokan, pengindeksan, atau gabungan pada kolom terenkripsi. Sebagai gantinya, untuk kolom yang ditujukan untuk tujuan pencarian atau pengelompokan, Anda harus menggunakan enkripsi deterministik. Jenis enkripsi ini memungkinkan operasi seperti pencarian titik, gabungan kesetaraan, pengelompokan, dan pengindeksan pada kolom terenkripsi.
Karena sistem database berdasarkan desain tidak memiliki akses ke kunci kriptografi, enkripsi kolom apa pun memerlukan pemindahan dan enkripsi data di luar database. Proses enkripsi dapat memakan waktu lama dan rentan terhadap gangguan jaringan. Selain itu, jika Anda perlu mengenkripsi ulang kolom nanti, seperti saat memutar kunci enkripsi atau mengubah jenis enkripsi, Anda mengalami kesulitan yang sama lagi. Menggunakan Always Encrypted dengan enklave aman menghilangkan kebutuhan untuk memindahkan data dari database. Karena enklave tepercaya, driver klien dalam aplikasi Anda atau alat seperti SQL Server Management Studio (SSMS) dapat dengan aman berbagi kunci dengan enklave selama operasi kriptografi. Enklave kemudian dapat mengenkripsi atau mengenkripsi ulang kolom di tempat, secara signifikan mengurangi waktu yang diperlukan untuk tindakan ini.
Untuk detail tentang algoritma kriptografi Always Encrypted, lihat Kriptografi Always Encrypted.
Anda dapat melakukan langkah-langkah sebelumnya dengan menggunakan alat SQL:
- Menyediakan kunci Always Encrypted menggunakan SQL Server Management Studio
- Mengonfigurasi Always Encrypted menggunakan PowerShell
- sqlpackage - yang mengotomatiskan proses penyiapan
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).
Setelah mengubah definisi kolom terenkripsi, jalankan sp_refresh_parameter_encryption untuk memperbarui metadata Always Encrypted untuk objek.
Batasan
Batasan berikut berlaku untuk kueri pada kolom terenkripsi:
Anda tidak dapat melakukan komputasi pada kolom yang dienkripsi dengan enkripsi acak. Enkripsi deterministik mendukung operasi berikut yang melibatkan perbandingan kesetaraan. Tidak ada operasi lain yang diizinkan:
- = (Sama dengan) (Transact-SQL) dalam pencarian titik.
- IN (Transact-SQL) .
- SELECT - GROUP BY- Transact-SQL.
- BERBEDA.
Catatan
Untuk aplikasi yang perlu melakukan pencocokan pola, gunakan operator perbandingan, urutkan, dan indeks pada kolom terenkripsi, terapkan Always Encrypted dengan enklave aman.
Anda tidak dapat menggunakan pernyataan kueri yang memicu komputasi yang melibatkan data teks biasa dan terenkripsi. 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 INTOatauINSERT..SELECT. - 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 charAplikasi perlu menggunakan parameter kueri untuk menyediakan nilai untuk kolom terenkripsi. Misalnya, saat Anda menyisipkan data ke dalam kolom terenkripsi atau memfilternya dengan menggunakan enkripsi deterministik, gunakan parameter kueri. 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.
Di SSMS, penting untuk menerapkan parameterisasi untuk variabel Always Encrypted untuk menjalankan kueri yang menangani nilai yang terkait dengan kolom terenkripsi. Persyaratan ini mencakup skenario seperti menyisipkan data ke dalam kolom terenkripsi atau menerapkan filter pada mereka (dalam kasus di mana enkripsi deterministik digunakan).
Parameter bernilai tabel yang menargetkan kolom terenkripsi tidak didukung.
Kueri yang menggunakan klausa berikut ini tidak didukung:
Always Encrypted tidak didukung untuk kolom dengan karakteristik berikut:
- Kolom yang menggunakan salah satu jenis data berikut: xml, tanda waktu, rowversion, gambar, ntext, teks, sql_variant, hierarkiid, geografi, geometri, vektor, alias, jenis yang ditentukan pengguna.
- Kolom FILESTREAM .
- Kolom dengan properti IDENTITY .
- Kolom dengan properti ROWGUIDCOL .
- Kolom string (varchar, char, dan lainnya) dengan kolatasi selain kolater titik kode biner (
_BIN2). Kolasi tidak boleh berbeda dari kolasi default database. - 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).
- Tentukan kolom komputasi dalam tabel.
- Kolom yang direferensikan oleh kolom komputasi saat ekspresi melakukan operasi yang tidak didukung untuk Always Encrypted.
- Gunakan 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 atau dilacak menggunakan tangkapan data perubahan.
- Kolom kunci utama pada tabel yang memiliki pelacakan perubahan.
- Kolom yang disamarkan menggunakan masking data dinamis.
- Saat kolom dalam tabel yang dioptimalkan memori direferensikan dalam modul yang dikompilasi secara asli, enkripsi tidak dapat diterapkan ke salah satu kolom dalam tabel tersebut.
- 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:
- Replikasi SQL Server (replikasi transaksional, penggabungan, atau replikasi rekam jepret). Fitur replikasi fisik, termasuk grup ketersediaan AlwaysOn, didukung.
- Kueri terdistribusi (server tertaut, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Kueri Lintas Database yang melakukan gabungan pada kolom yang dienkripsi dari database yang berbeda.
Referensi Always Encrypted Transact-SQL
Always Encrypted menggunakan pernyataan Transact-SQL berikut, tampilan katalog sistem, prosedur tersimpan sistem, dan izin.
Pernyataan
| Pernyataan DDL | Description |
|---|---|
| BUAT KUNCI MASTER KOLOM | Membuat objek metadata kunci master kolom dalam database |
| JATUHKAN KUNCI MASTER KOLOM | Menjatuhkan kunci master kolom dari database. |
| MEMBUAT KUNCI ENKRIPSI KOLOM | Membuat objek metadata kunci enkripsi kolom. |
| UBAH KUNCI ENKRIPSI KOLOM | Mengubah kunci enkripsi kolom dalam database, menambahkan atau menghilangkan nilai terenkripsi. |
| JATUHKAN KUNCI ENKRIPSI KOLOM | Menghilangkan kunci enkripsi kolom dari database. |
| BUAT TABEL (DIENKRIPSI DENGAN) | Menentukan kolom enkripsi |
Tampilan katalog sistem dan prosedur tersimpan
| Tampilan katalog sistem dan prosedur tersimpan | Description |
|---|---|
| sys.column_encryption_keys | Mengembalikan informasi tentang kunci enkripsi kolom (CEK) |
| sys.column_encryption_key_values | Mengembalikan informasi tentang nilai terenkripsi kunci enkripsi kolom (CEK) |
| sys.column_master_keys | Mengembalikan baris untuk setiap kunci master database |
| sp_refresh_parameter_encryption | Memperbarui metadata Always Encrypted untuk parameter prosedur tersimpan yang tidak terikat skema yang ditentukan, fungsi yang ditentukan pengguna, tampilan, pemicu DML, pemicu DDL tingkat database, atau pemicu DDL tingkat server |
| sp_describe_parameter_encryption | Menganalisis pernyataan Transact-SQL yang ditentukan dan parameternya, untuk menentukan parameter mana yang sesuai dengan kolom database yang dilindungi dengan menggunakan fitur Always Encrypted. |
Untuk informasi tentang metadata enkripsi yang disimpan untuk setiap kolom, lihat sys.columns.
Izin database
Always Encrypted menggunakan empat izin database.
| Tampilan katalog sistem dan prosedur tersimpan | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
Diperlukan untuk membuat dan menghapus metadata kunci master kolom. |
ALTER ANY COLUMN ENCRYPTION KEY |
Diperlukan untuk membuat dan menghapus metadata kunci enkripsi kolom. |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Diperlukan untuk mengakses dan membaca metadata kunci master kolom, yang diperlukan untuk mengkueri kolom terenkripsi. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
Diperlukan untuk mengakses dan membaca metadata kunci enkripsi kolom, yang diperlukan untuk mengkueri kolom terenkripsi. |
Tabel berikut ini meringkas izin yang diperlukan untuk tindakan umum.
| Skenario | ALTER ANY COLUMN MASTER KEY |
ALTER ANY COLUMN ENCRYPTION KEY |
VIEW ANY COLUMN MASTER KEY DEFINITION |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
|---|---|---|---|---|
| Manajemen kunci (membuat, mengubah, atau meninjau metadata kunci dalam database) | X | X | X | X |
| Mengkueri kolom terenkripsi | X | X |
Pertimbangan penting
Izin
VIEW ANY COLUMN MASTER KEY DEFINITIONdanVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONdiperlukan saat memilih kolom terenkripsi. Izin ini melindungi kolom bahkan jika pengguna tidak memiliki izin ke kunci master kolom di penyimpanan kunci mereka, dan mereka mencegah akses ke teks biasa.Di SQL Server, peran database tetap publik secara default memberikan izin
VIEW ANY COLUMN MASTER KEY DEFINITIONdanVIEW ANY COLUMN ENCRYPTION KEY DEFINITION. Administrator database mungkin memilih untuk mencabut atau menolak izin ini ke peran publik dan memberinya peran atau pengguna tertentu untuk menerapkan kontrol yang lebih terbatas.Di SQL Database, peran database tetap publik tidak memberikan izin
VIEW ANY COLUMN MASTER KEY DEFINITIONdanVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONsecara default. Perubahan ini memungkinkan alat warisan tertentu yang ada yang menggunakan versi DacFx yang lebih lama agar berfungsi dengan baik. Untuk bekerja dengan kolom terenkripsi (bahkan jika tidak mendekripsinya), administrator database harus secara eksplisit memberikanVIEW ANY COLUMN MASTER KEY DEFINITIONizin danVIEW ANY COLUMN ENCRYPTION KEY DEFINITION.