Jalankan pernyataan T-SQL menggunakan enklave yang aman
Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru - Hanya Windows Azure SQL Database
Always Encrypted dengan enklave aman memungkinkan beberapa pernyataan Transact-SQL (T-SQL) untuk melakukan komputasi rahasia pada kolom database terenkripsi di enklave aman sisi server.
Pernyataan menggunakan enklave aman
Jenis pernyataan T-SQL berikut menggunakan enklave aman.
Pernyataan DDL menggunakan enklave aman
Jenis pernyataan Data Definition Language (DDL) berikut memerlukan enklave aman.
- Pernyataan ALTER TABLE column_definition (Transact-SQL) yang memicu operasi kriptografi di tempat menggunakan kunci yang diaktifkan enklave. Untuk informasi selengkapnya, lihat Mengonfigurasi enkripsi kolom di tempat menggunakan Always Encrypted dengan enklave aman.
- Pernyataan CREATE INDEX (Transact-SQL) dan ALTER INDEX (Transact-SQL) yang membuat atau mengubah indeks pada kolom berkemampuan enklave menggunakan enkripsi acak. Untuk informasi selengkapnya, lihat Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman.
Pernyataan DML menggunakan enklave aman
Pernyataan atau kueri Data Manipulation Language (DML) berikut terhadap kolom yang diaktifkan enklave menggunakan enkripsi acak memerlukan enklave aman:
- Kueri yang menggunakan satu atau beberapa operator Transact-SQL berikut yang didukung di dalam enklave aman:
- Operator perbandingan
- ANTARA (T-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Gabungan - SQL Server 2019 (15.x) hanya mendukung gabungan perulangan berlapis. SQL Server 2022 (16.x) dan Azure SQL Database mendukung gabungan perulangan, hash, dan penggabungan berlapis
- SELECT - ORDER BY Clause (Transact-SQL). Didukung di SQL Server 2022 (16.x) dan Azure SQL Database. Tidak didukung di SQL Server 2019 (15.x)
- SELECT - GROUP BY Clause (Transact-SQL). Didukung di SQL Server 2022 (16.x) dan Azure SQL Database. Tidak didukung di SQL Server 2019 (15.x)
- Kueri yang menyisipkan, memperbarui, atau menghapus baris, yang pada gilirannya memicu penyisipan dan/atau menghapus kunci indeks ke/dari indeks pada kolom yang diaktifkan enklave. Untuk informasi selengkapnya, lihat Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman
Catatan
Operasi pada indeks dan kueri DML rahasia menggunakan enklave hanya didukung pada kolom berkemampuan enklave yang menggunakan enkripsi acak. Enkripsi deterministik tidak didukung.
Tingkat kompatibilitas database harus diatur ke SQL Server 2022 (160) atau yang lebih tinggi.
Di Azure SQL Database dan di SQL Server 2022 (16.x), kueri rahasia menggunakan enklave pada kolom string karakter (char
, nchar
) mengharuskan kolom menggunakan kolase titik kode biner (_BIN2) atau kolase UTF-8. Di SQL Server 2019 (15.x), kolase a_BIN2 diperlukan.
Perintah DBCC menggunakan enklave aman
Perintah administratif DBCC (Transact-SQL) yang melibatkan pemeriksaan integritas indeks mungkin juga memerlukan enklave aman jika database berisi indeks pada kolom yang diaktifkan enklave menggunakan enkripsi acak. Misalnya, DBCC CHECKDB (Transact-SQL) dan DBCC CHECKTABLE (Transact-SQL).
Prasyarat untuk menjalankan pernyataan menggunakan enklave aman
Lingkungan Anda perlu memenuhi persyaratan berikut untuk mendukung pernyataan eksekusi yang menggunakan enklave aman.
Instans SQL Server atau server database Anda di Azure SQL Database harus dikonfigurasi dengan benar untuk mendukung enklave dan pengesahan, jika berlaku/diperlukan. Untuk informasi selengkapnya, lihat Menyiapkan enklave dan pengesahan aman.
Saat Anda menyambungkan ke database dari aplikasi atau alat (seperti SQL Server Management Studio), pastikan untuk:
Gunakan versi driver klien atau versi alat yang mendukung Always Encrypted dengan enklave aman.
- Lihat Mengembangkan aplikasi menggunakan Always Encrypted dengan enklave aman untuk informasi tentang driver klien yang mendukung Always Encrypted dengan enklave aman.
- Lihat bagian berikut untuk informasi tentang alat yang mendukung Always Encrypted dengan enklave aman.
Aktifkan Always Encrypted untuk koneksi database.
Tentukan protokol pengesahan, yang menentukan apakah aplikasi atau alat Anda harus membuktikan enklave sebelum mengirimkan kueri enklave, dan layanan pengesahan mana yang harus digunakan. Sebagian besar alat dan driver mendukung protokol pengesahan berikut:
- Microsoft Azure Attestation - memberlakukan pengesahan menggunakan Microsoft Azure Attestation.
- Host Guardian Service - memberlakukan pengesahan menggunakan Host Guardian Service.
- Tidak ada - memungkinkan penggunaan enklave tanpa pengesahan.
Tabel di bawah ini menentukan protokol pengesahan yang valid untuk produk SQL dan teknologi enklave tertentu:
Produk Teknologi Enklave Protokol pengesahan yang didukung SQL Server 2019 (15.x) dan yang lebih baru Enklave VBS Layanan Wali Host, Tidak Ada Database Azure SQL Enklave SGX (dalam database seri DC) Microsoft Azure Attestation Database Azure SQL Enklave VBS Tidak
Tentukan URL pengesahan yang valid untuk lingkungan Anda jika Anda menggunakan pengesahan.
- Jika Anda menggunakan SQL Server dan Host Guardian Service (HGS), lihat Menentukan dan membagikan URL pengesahan HGS.
- Jika Anda menggunakan Azure SQL Database dengan enklave Intel SGX dan Microsoft Azure Attestation, lihat Menentukan URL pengesahan untuk kebijakan pengesahan Anda.
Prasyarat untuk menjalankan pernyataan T-SQL menggunakan enklave di SQL Server Management Directory
Unduh versi terbaru SQL Server Management Studio (SSMS).
Pastikan Anda menjalankan pernyataan dari jendela kueri yang menggunakan koneksi yang memiliki parameter Always Encrypted dan pengesahan yang dikonfigurasi dengan benar.
Dalam dialog Sambungkan ke Server, tentukan nama server Anda, pilih metode autentikasi, dan tentukan kredensial Anda.
Pilih Opsi >> dan pilih tab Properti Koneksi. Tentukan nama database Anda.
Pilih tab Always Encrypted.
Pilih Aktifkan Always Encrypted (enkripsi kolom).
Pilih Aktifkan enklave aman.
Atur Protokol ke:
- Layanan Wali Host jika Anda menggunakan SQL Server.
- Microsoft Azure Attestation jika Anda menggunakan Azure SQL Database dengan enklave Intel SGX.
- Tidak ada jika Anda menggunakan Azure SQL Database dengan enklave VBS.
Tentukan URL pengesahan enklave Anda. Tidak berlaku ketika Protokol diatur ke Tidak Ada. Misalnya,
https://hgs.bastion.local/Attestation
atauhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Pilih Sambungkan.
Jika Anda diminta untuk mengaktifkan Parameterisasi untuk kueri Always Encrypted, pilih Aktifkan.
Untuk informasi selengkapnya, lihat Mengaktifkan dan menonaktifkan Always Encrypted untuk koneksi database.
Prasyarat untuk menjalankan pernyataan T-SQL menggunakan enklave di Azure Data Studio
Disarankan minimum versi 1.23 atau yang lebih tinggi. Pastikan Anda menjalankan pernyataan dari jendela kueri yang menggunakan koneksi yang mengaktifkan Always Encrypted dan protokol pengesahan yang benar dan URL pengesahan yang dikonfigurasi.
Dalam dialog Koneksi, pilih Tingkat Lanjut....
Untuk mengaktifkan Always Encrypted untuk koneksi, atur bidang Always Encrypted ke Diaktifkan.
Untuk mengaktifkan enklave aman, atur bidang Enklave Aman ke Diaktifkan.
Tentukan protokol pengesahan dan URL pengesahan.
- Jika Anda menggunakan SQL Server, atur Protokol Pengesahan ke Layanan Wali Host dan masukkan URL pengesahan Layanan Wali Host Anda di bidang URL Pengesahan Enklave.
- Jika Anda menggunakan database seri DC dengan Intel SGX di Azure SQL Database, atur Protokol Pengesahan ke Azure Attestation dan masukkan URL pengesahan, merujuk kebijakan Anda di Microsoft Azure Attestation di bidang URL Pengesahan Enklave.
- Jika Anda menggunakan database dengan enklave VBS yang diaktifkan di Azure SQL Database, atur Protokol Pengesahan ke Tidak Ada.
Pilih OK untuk menutup Properti Tingkat Lanjut.
Untuk informasi selengkapnya, lihat Mengaktifkan dan menonaktifkan Always Encrypted untuk koneksi database.
Jika Anda berencana menjalankan kueri DML berparameter, Anda juga perlu mengaktifkan Parameterisasi untuk Always Encrypted.
Contoh
Bagian ini mencakup contoh kueri DML menggunakan enklave.
Contohnya menggunakan skema di bawah ini.
CREATE SCHEMA [HR];
GO
CREATE TABLE [HR].[Jobs](
[JobID] [int] IDENTITY(1,1) PRIMARY KEY,
[JobTitle] [nvarchar](50) NOT NULL,
[MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO
CREATE TABLE [HR].[Employees](
[EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
[SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[JobID] [int] NULL,
FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO
Pencarian pencocokan persis
Kueri di bawah ini melakukan pencarian yang sama persis pada kolom string terenkripsi SSN
.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Pencarian pencocokan pola
Kueri di bawah ini melakukan pencarian pencocokan pola pada kolom string terenkripsi SSN
, mencari karyawan dengan angka terakhir yang ditentukan untuk digit nomor jaminan sosial.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Perbandingan rentang
Kueri di bawah ini melakukan perbandingan rentang pada kolom terenkripsi Salary
, mencari karyawan dengan gaji dalam rentang yang ditentukan.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
Gabungan
Kueri di bawah ini melakukan gabungan antara Employees
dan Jobs
tabel menggunakan kolom terenkripsi Salary
. Kueri mengambil karyawan dengan gaji di luar rentang gaji untuk pekerjaan karyawan.
SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO
Pengurutan
Kueri di bawah ini mengurutkan catatan karyawan berdasarkan kolom terenkripsi Salary
, mengambil 10 karyawan dengan gaji tertinggi.
Catatan
Pengurutan kolom terenkripsi didukung di SQL Server 2022 (16.x) dan Azure SQL Database, tetapi tidak di SQL Server 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO
Langkah berikutnya
Lihat juga
- Memecahkan masalah umum untuk Always Encrypted dengan enclave aman
- Mulai menggunakan Always Encrypted dengan enklave aman
- Mengonfigurasi enkripsi kolom di tempat menggunakan Always Encrypted dengan enklave aman
- Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman