Menggunakan Always Encrypted dengan enklave aman dengan driver JDBC
Halaman ini menyediakan informasi tentang cara mengembangkan aplikasi Java menggunakan Always Encrypted dengan enklave aman dan Microsoft JDBC Driver 8.2 (atau lebih tinggi) untuk SQL Server.
Fitur enklave aman adalah tambahan untuk fitur Always Encrypted yang ada. Tujuan enklave aman adalah untuk mengatasi keterbatasan saat bekerja dengan data Always Encrypted. Sebelumnya, pengguna hanya dapat melakukan perbandingan kesetaraan pada data Always Encrypted, dan harus mengambil dan mendekripsi data untuk melakukan operasi lain. Enklave aman mengatasi batasan ini dengan memungkinkan komputasi pada data teks biasa di dalam enklave aman di sisi server. Enklave aman adalah wilayah memori yang dilindungi dalam proses SQL Server. Ini bertindak sebagai lingkungan eksekusi tepercaya untuk memproses data sensitif di dalam mesin SQL Server. Enklave aman muncul sebagai kotak hitam untuk sisa SQL Server dan proses lain pada mesin hosting. Tidak ada cara untuk melihat data atau kode apa pun di dalam enklave dari luar, bahkan dengan debugger.
Prasyarat
- Pastikan Microsoft JDBC Driver 8.2 (atau lebih tinggi) untuk SQL Server diinstal pada komputer pengembangan Anda.
- Verifikasi dependensi lingkungan seperti DLL, KeyStores, dan sebagainya, berada di jalur yang benar. Always Encrypted dengan enklave aman adalah add-on untuk fitur Always Encrypted yang ada dan berbagi prasyarat serupa.
Catatan
Jika Anda menggunakan versi JDK 8 yang lebih lama, Anda mungkin perlu mengunduh dan menginstal File Kebijakan Yurisdiksi Kekuatan Tak Terbatas Java Cryptography Extension (JCE). Pastikan untuk membaca Readme yang disertakan dalam file zip untuk instruksi penginstalan dan detail yang relevan tentang kemungkinan masalah ekspor/impor.
File kebijakan dapat diunduh dari Java Cryptography Extension (JCE) Unlimited Strength Yurisdiction Policy Files 8 Download
Menyiapkan enklave aman
Ikuti Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server, Tutorial: Mulai menggunakan Always Encrypted dengan enklave Intel SGX di Azure SQL Database, atau Tutorial: Mulai menggunakan Always Encrypted dengan enklave VBS di Azure SQL Database untuk mulai menggunakan enklave yang aman. Untuk informasi lebih mendalam, lihat Selalu dienkripsi dengan enklave aman.
Properti String Koneksi
Untuk mengaktifkan komputasi enklave untuk koneksi database, Anda perlu mengatur kata kunci string koneksi berikut, selain mengaktifkan Always Encrypted.
enclaveAttestationProtocol - menentukan protokol pengesahan.
- Jika Anda menggunakan SQL Server dan Host Guardian Service (HGS), nilai kata kunci ini harus
HGS
. - Jika Anda menggunakan Azure SQL Database dan Microsoft Azure Attestation, nilai kata kunci ini harus
AAS
. - Jika Anda menggunakan enklave aman di lingkungan di mana layanan pengesahan tidak tersedia, nilai kata kunci ini harus
NONE
. Memerlukan JDBC 12.2 atau yang lebih baru.
- Jika Anda menggunakan SQL Server dan Host Guardian Service (HGS), nilai kata kunci ini harus
enclaveAttestationUrl: - menentukan URL pengesahan (titik akhir layanan pengesahan). Anda perlu mendapatkan URL pengesahan untuk 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 Azure SQL Database dan Microsoft Azure Attestation, lihat Menentukan URL pengesahan untuk kebijakan pengesahan Anda.
- Jika Anda menggunakan
NONE
protokol pengesahan, properti ini dapat dibiarkan kosong.
Pengguna harus mengaktifkan columnEncryptionSetting dan mengatur kedua properti string koneksi di atas dengan benar untuk mengaktifkan Always Encrypted dengan enklave aman dari Driver Microsoft JDBC untuk SQL Server.
Bekerja dengan enklave aman
Ketika properti koneksi enklave diatur dengan benar, fitur akan berfungsi secara transparan. Driver akan menentukan apakah kueri memerlukan penggunaan enklave aman secara otomatis. Berikut ini adalah contoh kueri yang memicu komputasi enklave. Anda dapat menemukan penyetelan database dan tabel di Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server atau Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di Azure SQL Database.
Kueri kaya akan memicu komputasi enklave:
private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL)) {
try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SSN LIKE ?")) {
p.setString(1, "%6818");
try (ResultSet rs = p.executeQuery()) {
while (rs.next()) {
// Do work with data
}
}
}
try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SALARY > ?")) {
((SQLServerPreparedStatement) p).setMoney(1, new BigDecimal(0));
try (ResultSet rs = p.executeQuery()) {
while (rs.next()) {
// Do work with data
}
}
}
}
Beralih enkripsi pada kolom juga akan memicu komputasi enklave:
private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL);Statement s = c.createStatement()) {
s.executeUpdate("ALTER TABLE Employees ALTER COLUMN SSN CHAR(11) NULL WITH (ONLINE = ON)");
}
Pengguna Java 8
Fitur ini memerlukan algoritma tanda tangan RSASSA-PSA. Algoritma ini ditambahkan di JDK 11, tetapi tidak di-port kembali ke JDK 8. Pengguna yang ingin menggunakan fitur ini dengan Driver Microsoft JDBC versi JDK 8 untuk SQL Server harus memuat penyedia mereka sendiri, yang mendukung algoritma tanda tangan RSASSA-PSA, atau menyertakan BouncyCastleProvider
dependensi opsional. Dependensi akan dihapus di kemudian hari jika port belakang JDK 8 algoritma tanda tangan atau jika siklus hidup dukungan JDK 8 berakhir.