Verwenden von Always Encrypted mit Secure Enclaves mit dem JDBC-Treiber

JDBC-Treiber herunterladen

Dieser Artikel enthält Informationen zum Entwickeln von Java-Anwendungen mithilfe von Always Encrypted mit Secure Enclaves und des Microsoft JDBC-Treibers 8.2 (oder höher) für SQL Server.

Das Secure Enclaves-Feature ist eine Ergänzung des bereits vorhandenen Always Encrypted-Features. Mit Secure Enclaves sollen Einschränkungen bei der Arbeit mit Always Encrypted-Daten beseitigt werden. Bisher konnten Benutzer für Always Encrypted-Daten nur Gleichheitsvergleiche durchführen und mussten die Daten abrufen und entschlüsseln, um andere Vorgänge durchführen zu können. Secure Enclaves beseitigen diese Einschränkungen, indem Berechnungen für Klartextdaten innerhalb einer Secure Enclave auf Serverseite zugelassen werden. Eine Secure Enclave ist ein geschützter Speicherbereich innerhalb des SQL Server-Prozesses. Sie fungiert als vertrauenswürdige Ausführungsumgebung für die Verarbeitung vertraulicher Daten innerhalb der SQL Server-Engine. Eine Secure Enclave wird dem Rest von SQL Server und anderen Prozessen auf dem Hostcomputer als Blackbox angezeigt. Es gibt keine Möglichkeit, Daten oder Code innerhalb der Enclave von außen anzuzeigen, auch nicht mit einem Debugger.

Voraussetzungen

  • Stellen Sie sicher, dass der Microsoft JDBC-Treiber 8.2 (oder höher) für SQL Server auf dem Entwicklungscomputer installiert ist.
  • Überprüfen Sie, ob sich die Umgebungsabhängigkeiten wie DLLs, Keystores usw. jeweils im richtigen Pfad befinden. Always Encrypted mit Secure Enclaves ist ein Add-On für das bereits vorhandene Always Encrypted-Feature und verfügt über ähnliche Voraussetzungen.

Hinweis

Wenn Sie eine ältere Version von JDK 8 verwenden, müssen Sie möglicherweise die Richtliniendateien „Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction“ herunterladen und installieren. Achten Sie darauf, die in der ZIP-Datei enthaltene Infodatei zu lesen, um Installationsanweisungen und relevante Details zu möglichen Export-/Importproblemen zu erhalten.

Diese Richtliniendateien können unter Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download heruntergeladen werden.

Einrichten von Secure Enclaves

Informationen zu den ersten Schritten mit Secure Enclaves finden Sie den Tutorials Erste Schritte mit Always Encrypted mit Secure Enclaves in SQL Server, Erste Schritte mit Always Encrypted mit Intel SGX-Enclaves in Azure SQL-Datenbank und Erste Schritte mit Always Encrypted mit VBS-Enclaves in Azure SQL-Datenbank. Ausführlichere Informationen finden Sie unter Always Encrypted mit Secure Enclaves.

Verbindungszeichenfolgen-Eigenschaften

Um Enclaveberechnungen für eine Datenbankverbindung zu ermöglichen, müssen Sie zusätzlich zur Aktivierung von Always Encrypted die folgenden Schlüsselwörter für die Verbindungszeichenfolge festlegen.

  • enclaveAttestationProtocol: gibt ein Nachweisprotokoll an.

    • Wenn Sie SQL Server und den Host-Überwachungsdienst (Host Guardian Service, HGS) verwenden, sollte der Wert dieses Schlüsselworts HGS lauten.
    • Wenn Sie Azure SQL-Datenbank und Microsoft Azure Attestation verwenden, sollte der Wert dieses Schlüsselworts AAS lauten.
    • Wenn Sie Secure Enclaves in einer Umgebung verwenden, in der keine Nachweisdienste verfügbar sind, sollte der Wert dieses Schlüsselworts NONE sein. Erfordert JDBC 12.2 oder höher.
  • enclaveAttestationUrl: gibt eine Nachweis-URL (einen Endpunkt für den Nachweisdienst) an. Sie benötigen für Ihre Umgebung eine Nachweis-URL von dem Dienstadministrator, der für Nachweise zuständig ist.

Benutzer müssen columnEncryptionSetting aktivieren und beide der oben genannten Verbindungszeichenfolgen-Eigenschaften richtig festlegen, um Always Encrypted mit Secure Enclaves aus dem Microsoft JDBC-Treiber für SQL Server zu aktivieren.

Arbeiten mit Secure Enclaves

Wenn die Verbindungseigenschaften der Enclaves richtig festgelegt wurden, arbeitet das Feature transparent. Der Treiber stellt automatisch fest, ob für die Abfrage Secure Enclaves erforderlich sind. Enclaveberechnungen werden beispielsweise bei den folgenden Abfragen ausgelöst. Informationen zum Einrichten von Datenbank und Tabellen finden Sie im Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in SQL Server und im Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in Azure SQL-Datenbank.

Umfangreiche Abfragen lösen Enclave-Berechnungen aus:

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
            }
        }
    }
}

Das Verschlüsseln von Spalten löst ebenfalls Enclave-Berechnungen aus:

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)");
}

Benutzer von Java 8

Für dieses Feature ist der Signaturalgorithmus RSASSA-PSA erforderlich. Dieser Algorithmus wurde in JDK 11 hinzugefügt, aber nicht auf JDK 8 zurückportiert. Benutzer, die dieses Feature mit der JDK 8-Version von Microsoft JDBC-Treiber für SQL Server verwenden möchten, müssen entweder einen eigenen Anbieter laden, der den Signaturalgorithmus RSASSA-PSA unterstützt, oder die optionale BouncyCastleProvider-Abhängigkeit integrieren. Diese Abhängigkeit wird später entfernt, wenn der Signaturalgorithmus auf JDK 8 zurückportiert wird oder der Support-Lebenszyklus von JDK 8 endet.

Weitere Informationen

Verwenden von Always Encrypted mit dem JDBC-Treiber