Verwenden von Always Encrypted mit sicheren Enklaven im 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 sichere Enklave erscheint für den Rest von SQL Server und andere Prozesse auf dem Hostcomputer als Blackbox. 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

Folgen Sie Tutorial: Erste Schritte unter Verwendung von Always Encrypted mit Secure Enclaves in SQL Server, Tutorial: Erste Schritte unter Verwendung von Always Encrypted mit Intel SGX-Enclaves in Azure SQL-Datenbank oder Tutorial: Erste Schritte mit Always Encrypted mit VBS-Enclaves in Azure SQL-Datenbank, um erste Schritte mit Secure Enclaves auszuführen. Ausführlichere Informationen finden Sie unter Always Encrypted mit Secure Enclaves.

Eigenschaften der Verbindungszeichenfolge

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 sicheren Enklaven

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. Im Folgenden sind Beispiele für Abfragen, die Enclave-Berechnungen auslösen. 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

Diese Funktion erfordert den Signaturalgorithmus RSASSA-PSA. 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.