Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Important
Der Support für Always Encrypted mit Intel Software Guard Extensions (Intel SGX)-Enklaven endet am 31. Oktober 2027. Migrieren Sie betroffene Datenbanken vor diesem Datum. Nach dem 31. Oktober 2027 verschiebt Azure automatisch jede Datenbank, die sich auf der DC-Serien-Compute-Stufe befindet, auf eine unterstützte Standardserien-Compute-Stufe (nicht-DC) und aktiviert virtualisierungsbasierte Sicherheits-Enklaven (VBS). Für Migrationsoptionen siehe Always Encrypted with Intel SGX Enclaves Migrationsleitfaden.
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
HGSlauten. - Wenn Sie Azure SQL-Datenbank und Microsoft Azure Attestation verwenden, sollte der Wert dieses Schlüsselworts
AASlauten. - Wenn Sie Secure Enclaves in einer Umgebung verwenden, in der keine Nachweisdienste verfügbar sind, sollte der Wert dieses Schlüsselworts
NONEsein. Erfordert JDBC 12.2 oder höher.
- Wenn Sie SQL Server und den Host-Überwachungsdienst (Host Guardian Service, HGS) verwenden, sollte der Wert dieses Schlüsselworts
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.
- Wenn Sie SQL Server und den Host-Überwachungsdienst verwenden, finden Sie weitere Informationen unter Ermitteln und Freigeben der HGS-Nachweis-URL.
- Wenn Sie Azure SQL-Datenbank und Microsoft Azure Attestation verwenden, finden Sie weitere Informationen unter Ermitteln der Nachweis-URL für Ihre Nachweisrichtlinie.
- Wenn Sie das Nachweisprotokoll
NONEverwenden, kann diese Eigenschaft leer gelassen werden.
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.
Ab Version 13.6 prüft der Treiber, wenn enclaveAttestationProtocol=HGS, ob der signierte VBS-Enklave-Bericht an den für die Sitzung verwendeten öffentlichen Schlüssel der Enklave gebunden ist. Die Attestation scheitert, wenn Bericht und Sitzungsschlüssel nicht übereinstimmen. Es sind keine Änderungen an der Verbindungszeichenfolge erforderlich.
Zwischenspeicherung von Spaltenverschlüsselungsschlüsseln
Ab Version 13.6 leitet der Treiber die Suche nach Enclave-Spaltenverschlüsselungsschlüsseln über SQLServerSymmetricKeyCache weiter, im Einklang mit Always Encrypted-Vorgängen ohne Enclave. Wiederholte Enklave-Abfragen können einen zwischengespeicherten Klartext-Spaltenverschlüsselungsschlüssel wiederverwenden, anstatt eine weitere Anfrage an den Spalten-Hauptschlüsselspeicher zu stellen. Dieses Verhalten reduziert Anfragen an den Schlüsselspeicher und die Abfragelatenz, insbesondere bei entfernten Speichern wie Azure Key Vault, und erfordert keine Anwendungsänderungen.
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.