Menjalankan pernyataan Transact-SQL menggunakan enklave aman
Berlaku untuk:
Dimulai dengan SQL Server 2019 (15.x) - Windows hanya
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.
- ALTER TABLE column_definition (Transact-SQL) pernyataan 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 Bahasa Manipulasi Data (DML) berikut terhadap kolom yang diaktifkan enklave menggunakan enkripsi acak memerlukan enklave aman:
- Kueri yang menggunakan satu atau beberapa operator Transact-SQL berikut ini didukung di dalam enklave aman:
- Operator Perbandingan
- ANTARA (SQL Bertransaksi)
- IN (SQL Bertransaksi)
- LIKE (Transact-SQL)
- DISTINCT
- Gabungan - SQL Server 2019 (15.x) hanya mendukung gabungan perulangan berlapis. SQL Server 2022 dan Azure SQL Database mendukung gabungan perulangan, hash, dan penggabungan berlapis
- SELECT - ORDER BY Clause (Transact-SQL). Didukung pada SQL Server 2022 dan Azure SQL Database. Tidak didukung di SQL Server 2019 (15.x)
- SELECT - GROUP BY Clause (Transact-SQL). Didukung pada SQL Server 2022 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 berkemampuan 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.
Pada SQL Server 2019 (15.x) atau yang lebih baru, kueri rahasia menggunakan enklave pada kolom string karakter (char, nchar) memerlukan kolate urutan pengurutan biner2 (BIN2) yang dikonfigurasi untuk kolom. Dalam Azure SQL Database, diperlukan kolatasi BIN2 atau UTF-8.
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 database dan server Anda di Azure SQL Database harus dikonfigurasi dengan benar untuk mendukung enklave dan pengesahan. Untuk informasi selengkapnya, lihat Menyiapkan enklave dan pengesahan aman.
Anda perlu mendapatkan URL pengesahan dari lingkungan Anda dari administrator layanan pengesahan Anda.
- Jika Anda menggunakan SQL Server dan Host Guardian Service (HGS), lihat Menentukan dan membagikan URL pengesahan HGS.
- Jika Anda menggunakan pengesahan Azure SQL Database dan Microsoft Azure, lihat Menentukan URL pengesahan untuk kebijakan pengesahan Anda.
Jika Anda menyambungkan ke database menggunakan aplikasi, itu harus menggunakan driver klien yang mendukung Always Encrypted dengan enklave aman. Aplikasi harus tersambung ke database dengan Always Encrypted diaktifkan untuk koneksi database dan protokol pengesahan dan URL pengesahan yang dikonfigurasi dengan benar. Untuk informasi selengkapnya, lihat Mengembangkan aplikasi menggunakan Always Encrypted dengan enklave aman.
Jika Anda menggunakan SQL Server Management Studio (SSMS) atau Azure SQL Data Studio, Anda perlu mengaktifkan Always Encrypted dan mengonfigurasi protokol pengesahan dan URL pengesahan saat menyambungkan ke database Anda. Lihat bagian berikut untuk detail.
Catatan
Menyambungkan ke database dengan Always Encrypted dan pengesahan yang dikonfigurasi tidak diperlukan untuk operasi berikut jika Anda menggunakan kunci enkripsi kolom yang di-cache: Kueri DDL yang membuat atau mengubah indeks, kueri DML yang memperbarui indeks, dan perintah DBCC yang memeriksa integritas indeks. Untuk informasi selengkapnya, lihat Memanggil operasi pengindeksan menggunakan kunci enkripsi kolom yang di-cache.
Prasyarat untuk menjalankan pernyataan T-SQL menggunakan enklave di SSMS
Persyaratan versi minimum untuk SQL Server Management Studio:
- SSMS 18.3 saat menggunakan SQL Server.
- SSMS 18.8 saat menggunakan Azure SQL Database.
Pastikan Anda menjalankan pernyataan dari jendela kueri yang menggunakan koneksi yang memiliki Always Encrypted dan URL pengesahan yang benar yang dikonfigurasi.
Dalam dialog Koneksi ke Server, tentukan nama server Anda, pilih metode autentikasi, dan tentukan kredensial Anda.
Klik Opsi >> dan pilih tab Always Encrypted.
Pilih kotak centang Aktifkan Always Encrypted (enkripsi kolom) dan tentukan URL pengesahan enklave Anda. Misalnya,
https://hgs.bastion.local/Attestationatauhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.
Pilih Sambungkan.
Jika Anda diminta untuk mengaktifkan Parameterisasi untuk kueri Always Encrypted, pilih Aktifkan jika Anda berencana menjalankan kueri DML berparameter. Untuk informasi selengkapnya, lihat Parameterisasi untuk Always Encrypted.
Untuk informasi tambahan, 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 telah Always Encrypted diaktifkan dan protokol pengesahan yang benar dan URL pengesahan yang dikonfigurasi.
Dalam dialog Koneksi , klik Tingkat Lanjut....
Untuk mengaktifkan Always Encrypted koneksi, atur bidang Always Encrypted ke Diaktifkan.
Tentukan protokol pengesahan dan URL pengesahan.
- Jika Anda menggunakan SQL Server 2019 (15.x) atur Protokol Pengesahan ke Layanan Wali Host dan masukkan URL pengesahan Layanan Wali Host Anda di bidang URL Pengesahan Enklave.
- Jika Anda menggunakan Azure SQL Database, atur Protokol Pengesahan ke Azure Attestation dan masukkan URL pengesahan yang mereferensikan kebijakan Anda di Microsoft Azure Pengesahan di bidang URL Pengesahan Enklave.

Klik OK untuk menutup Properti Tingkat Lanjut.
Untuk informasi tambahan, lihat Mengaktifkan dan menonaktifkan Always Encrypted untuk koneksi database.
Jika Anda berencana untuk 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 yang tepat
Kueri di bawah ini melakukan pencarian pencocokan yang tepat 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 rekaman karyawan berdasarkan kolom terenkripsi Salary , mengambil 10 karyawan dengan gaji tertinggi.
Catatan
Pengurutan kolom terenkripsi didukung di SQL Server 2022 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
- Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server
- Tutorial: Memulai Always Encrypted dengan enklave aman di Azure SQL Database
- Mengonfigurasi enkripsi kolom di tempat menggunakan Always Encrypted dengan enklave aman
- Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman