Menggunakan Always Encrypted dengan enklave aman dengan driver JDBC

Unduh 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.
  • enclaveAttestationUrl: - menentukan URL pengesahan (titik akhir layanan pengesahan). Anda perlu mendapatkan URL pengesahan untuk lingkungan Anda dari administrator layanan pengesahan Anda.

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.

Lihat juga

Menggunakan Always Encrypted dengan driver JDBC