Always Encrypted mit Secure EnclavesAlways Encrypted with secure enclaves

Anwendungsbereich:Applies to:JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)-Nur WindowsAnwendungsbereich:Applies to: JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only

Always Encrypted mit Secure Enclaves bietet zusätzliche Funktionalität für das Feature Always Encrypted.Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

Always Encrypted wurde in SQL Server 2016 eingeführt und schützt vertrauliche Daten vor Schadsoftware und dem Zugriff nicht autorisierter SQL Server-Benutzer mit hohen Berechtigungen.Introduced in SQL Server 2016, Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users of SQL Server. Nicht autorisierte Benutzer mit hohen Berechtigungen sind Datenbankadministratoren, Computeradministratoren, Cloudadministratoren sowie alle anderen Benutzer, die legitim auf Serverinstanzen, Hardware und ähnliches zugreifen, aber keine Zugriff auf einige oder alle der tatsächlichen Daten haben sollten.High-privileged unauthorized users are DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but who should not have access to some or all of the actual data.

Ohne die in diesem Artikel erläuterten Erweiterungen schützt Always Encrypted die Daten, indem das Feature die Daten auf Clientseite verschlüsselt und niemals zulässt, dass die Daten oder die zugehörigen kryptografischen Schlüssel als Klartext in der SQL Server-Engine angezeigt werden.Without the enhancements discussed in this article, Always Encrypted protects the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the SQL Server Engine. Daher ist die Funktionalität von verschlüsselten Spalten innerhalb der Daten stark eingeschränkt.As a result, the functionality on encrypted columns inside the database is severely restricted. Die einzigen Vorgänge, die SQL Server für verschlüsselte Daten ausführen kann, sind Gleichheitsvergleiche (und diese waren nur bei deterministischer Verschlüsselung verfügbar).The only operations SQL Server can perform on encrypted data are equality comparisons (only available with deterministic encryption). Alle anderen Vorgänge, beispielweise kryptografische Vorgänge (anfängliche Datenverschlüsselung oder Schlüsselrotation), sowie umfangreiche Berechnungen (z. B. Musterabgleich) werden innerhalb der Datenbank nicht unterstützt.All other operations, including cryptographic operations (initial data encryption or key rotation) and or rich computations (for example, pattern matching) are not supported inside the database. Benutzer müssen ihre Daten aus der Datenbank verschieben, um diese Vorgänge auf Clientseite auszuführen.Users need to move their data outside of the database to perform these operations on the client-side.

Always Encrypted mit Secure Enclaves beseitigt diese Einschränkungen, indem Berechnungen für Klartextdaten innerhalb einer Secure Enclave auf Serverseite zugelassen werden.Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. Eine Secure Enclave ist eine geschützte Arbeitsspeicherregion im SQL Server-Prozess und fungiert als vertrauenswürdige Ausführungsumgebung für die Verarbeitung vertraulicher Daten in der SQL Server-Engine.A secure enclave is a protected region of memory within the SQL Server process, and acts as a trusted execution environment for processing sensitive data inside the SQL Server engine. Eine Secure Enclave wird dem Rest von SQL Server und anderen Prozessen auf dem Hostcomputer als Blackbox angezeigt.A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. Es gibt keine Möglichkeit, Daten oder Code innerhalb der Enclave von außen anzuzeigen, auch nicht mit einem Debugger.There is no way to view any data or code inside the enclave from the outside, even with a debugger.

Always Encrypted verwendet Secure Enclaves wie im folgenden Diagramm veranschaulicht:Always Encrypted uses secure enclaves as illustrated in the following diagram:

Datenfluss

Beim Analysieren der Abfrage einer Anwendung ermittelt die SQL Server-Engine, ob die Abfrage Vorgänge für verschlüsselte Daten enthält, für die die Verwendung der Secure Enclave erforderlich ist.When parsing an application's query, the SQL Server Engine determines if the query contains any operations on encrypted data that require the use of the secure enclave. Bei Abfragen, für die auf die Secure Enclave zugegriffen werden muss, gilt Folgendes:For queries where the secure enclave needs to be accessed:

  • Der Clienttreiber sendet die für die Vorgänge erforderlichen Spaltenverschlüsselungsschlüssel an die Secure Enclave (oder einen sicheren Kanal).The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • Dann übermittelt der Clienttreiber die Abfrage zusammen mit den verschlüsselten Abfrageparametern zur Ausführung.Then, the client driver submits the query for execution along with the encrypted query parameters.

Während der Verarbeitung der Abfrage werden weder die Daten noch die Spaltenverschlüsselungsschlüssel außerhalb der Secure Enclave als Klartext in der SQL Server-Engine verfügbar gemacht.During query processing, the data or the column encryption keys are not exposed in plaintext in the SQL Server Engine outside of the secure enclave. Die SQL Server-Engine delegiert kryptografische Vorgänge und Berechnungen für verschlüsselte Spalten an die Secure Enclave.The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. Bei Bedarf entschlüsselt die Secure Enclave die Abfrageparameter und/oder die in verschlüsselten Spalten gespeicherten Daten und führt die angeforderten Vorgänge aus.If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

In SQL Server 2019 (15.x)SQL Server 2019 (15.x) verwendet Always Encrypted über Virtualisierungsbasierte Sicherheit (VBS) abgesicherte Secure Enclaves (auch als VSM-Enclaves bezeichnet) im Windows-Arbeitsspeicher.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

Was spricht für die Verwendung von Always Encrypted mit Secure Enclaves?Why use Always Encrypted with secure enclaves?

Mit Secure Enclaves schützt Always Encrypted die Vertraulichkeit von Daten und bietet gleichzeitig folgende Vorteile:With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • Direkte Verschlüsselung: Kryptografische Vorgänge für vertrauliche Daten, wie z.B. die anfängliche Datenverschlüsselung oder das Rotieren eines Spaltenverschlüsselungsschlüssels, werden innerhalb der Secure Enclave ausgeführt und erfordern kein Verschieben der Daten an einen Ort außerhalb der Datenbank.In-place encryption - cryptographic operations on sensitive data, for example: initial data encryption or rotating a column encryption key, are performed inside the secure enclave and do not require moving the data outside of the database. Sie können die direkte Verschlüsselung mit der Transact-SQL-Anweisung ALTER TABLE ausführen. Sie benötigen keine Tools wie etwa den Always Encrypted-Assistenten in SSMS oder das PowerShell-Cmdlet „Set-SqlColumnEncryption“.You can issue in-place encryption using the ALTER TABLE Transact-SQL statement, and you do not need to use tools, such as the Always Encrypted wizard in SSMS or the Set-SqlColumnEncryption PowerShell cmdlet.

  • Umfangreiche Berechnungen: Vorgänge in verschlüsselten Spalten, wie z.B. Musterabgleich (das LIKE-Prädikat) und Bereichsvergleiche, werden innerhalb der Secure Enclave unterstützt. Damit lässt sich Always Encrypted für eine Vielzahl von Anwendungen und Szenarien verwenden, bei denen solche Berechnungen innerhalb des Datenbanksystems ausgeführt werden müssen.Rich computations - operations on encrypted columns, including pattern matching (the LIKE predicate) and range comparisons, are supported inside the secure enclave, which unlocks Always Encrypted to a broad range of applications and scenarios that require such computations to be performed inside the database system.

Nachweis von Secure EnclavesSecure Enclave Attestation

Die Secure Enclave in der SQL Server-Engine kann im Klartextformat auf vertrauliche Daten, die in verschlüsselten Datenbankspalten gespeichert sind, sowie auf die entsprechenden Spaltenverschlüsselungsschlüssel zugreifen.The secure enclave inside the SQL Server Engine can access sensitive data stored in encrypted database columns and the corresponding column encryption keys in plaintext. Bevor eine Abfrage mit Enclave-Berechnungen an SQL Server übermittelt wird, muss der Clienttreiber innerhalb der Anwendung überprüfen, ob es sich bei der Secure Enclave um eine echte Enclave handelt, die auf einer bestimmten Technologie basiert (z.B. VBS). Darüber hinaus muss der Treiber überprüfen, ob der Code, der in der Enclave ausgeführt wird, für die Ausführung in der Enclave signiert wurde.Before submitting a query that involves enclave computations to SQL Server, the client driver inside the application must verify the secure enclave is a genuine enclave based on a given technology (for example, VBS) and the code running inside the enclave has been signed for running inside the enclave.

Der Prozess der Überprüfung der Enclave wird als Enclave-Nachweis bezeichnet und erfordert, dass sowohl ein Clienttreiber innerhalb der Anwendung als auch SQL Server einen externen Nachweisdienst kontaktiert.The process of verifying the enclave is called enclave attestation, and it involves both a client driver within the application and SQL Server contacting an external attestation service. Die genauen Merkmale des Nachweisprozesses richten sich nach der Enclave-Technologie und dem Nachweisdienst.The specifics of the attestation process depend on the enclave technology and the attestation service.

Der Nachweisprozess, den SQL Server für Secure Enclaves für VBS in SQL Server 2019 (15.x)SQL Server 2019 (15.x) unterstützt, ist der Windows Defender System Guard-Runtimenachweis, bei dem Host Guardian Service (HGS) als Nachweisdienst verwendet wird.The attestation process SQL Server supports for VBS secure enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x) is Windows Defender System Guard runtime attestation, which uses Host Guardian Service (HGS) as an attestation service. Sie müssen HGS in Ihrer Umgebung konfigurieren und den Computer, auf dem Ihre SQL Server-Instanz gehostet wird, in HGS registrieren.You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. Sie müssen auch Ihre Clientanwendungen oder -tools (z.B. SQL Server Management Studio) mit einem HGS-Nachweis konfigurieren.You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

Unterstützte ClienttreiberSupported Client Drivers

Um Always Encrypted mit Secure Enclaves verwenden zu können, muss eine Anwendung einen Clienttreiber nutzen, der dieses Feature unterstützt.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. Sie müssen die Anwendung sowie den Clienttreiber konfigurieren, um Enclave-Berechnungen und Enclave-Nachweise zu aktivieren.You need to configure the application and the client driver to enable enclave computations and enclave attestation. Weitere Informationen, einschließlich der Liste der unterstützten Clienttreiber, finden Sie unter Always Encrypted mit Secure Enclaves.For details, including the list of supported client drivers, see Always Encrypted with secure enclaves.

Enclave-fähige SchlüsselEnclave-enabled Keys

Always Encrypted mit Secure Enclave führt das Konzept der Enclave-fähigen Schlüssel ein:Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Enclave-fähiger Spaltenhauptschlüssel: Ein Spaltenhauptschlüssel, für den die ENCLAVE_COMPUTATIONS-Eigenschaft im Spaltenhauptschlüssel-Metadatenobjekt in der Datenbank angegeben ist.Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. Das Spaltenhauptschlüssel-Metadatenobjekt muss auch eine gültige Signatur der Metadateneigenschaften enthalten.The column master key metadata object must also contain a valid signature of the metadata properties.
  • Enclave-fähiger Spaltenverschlüsselungsschlüssel: Ein Spaltenverschlüsselungsschlüssel, der mit einem Enclave-fähigen Spaltenhauptschlüssel verschlüsselt ist.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

Wenn die SQL Server-Engine feststellt, dass die in einer Abfrage angegebenen Vorgänge innerhalb der Secure Enclave ausgeführt werden müssen, fordert die Engine den Clienttreiber auf, die für die Berechnungen erforderlichen Spaltenverschlüsselungsschlüssel für die Secure Enclave freizugeben.When the SQL Server Engine determines operations, specified in a query, need to be performed inside the secure enclave, the SQL Server Engine requests the client driver shares the column encryption keys that are needed for the computations with the secure enclave. Der Clienttreiber gibt die Spaltenverschlüsselungsschlüssel nur dann frei, wenn diese Enclave-fähig sind (also mit Enclave-fähigen Spaltenhauptschlüsseln verschlüsselt wurden) und ordnungsgemäß signiert wurden.The client driver shares the column encryption keys only if the keys are enclave-enabled (that is, encrypted with enclave-enabled column master keys) and they're properly signed. Andernfalls kann die Abfrage nicht ausgeführt werden.Otherwise, the query fails.

Weitere Informationen finden Sie unter Verwalten von Schlüsseln für Always Encrypted mit Secure Enclaves.For more information, see Manage keys for Always Encrypted with secure enclaves.

Enclave-fähige SpaltenEnclave-enabled Columns

Eine Enclave-fähige Spalte ist eine Datenbankspalte, die mit einem Enclave-fähigen Spaltenverschlüsselungsschlüssel verschlüsselt ist.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. Welche Funktionalität für eine Enclave-fähige Spalte verfügbar ist, richtet sich nach dem von der Spalte verwendeten Verschlüsselungstyp.The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • Deterministische Verschlüsselung: Enclave-fähige Spalten, die die deterministische Verschlüsselung verwenden, unterstützen die direkte Verschlüsselung, aber keine anderen Vorgänge innerhalb der Secure Enclave.Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. Gleichheitsvergleiche werden unterstützt. Dafür wird jedoch außerhalb der Enclave der Chiffretext verglichen.Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • Verschlüsselung nach dem Zufallsprinzip: Enclave-fähige Spalten, die die Verschlüsselung nach dem Zufallsprinzip verwenden, unterstützen die direkte Verschlüsselung sowie umfangreiche Berechnungen innerhalb der Secure Enclave.Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. Zu den unterstützten umfangreichen Berechnungen zählen Musterabgleich und Vergleichsoperatoren, einschließlich Gleichheitsvergleich.The supported rich computations are pattern matching and comparison operators, including equality comparison.

Weitere Informationen zu Verschlüsselungstypen finden Sie unter Always Encrypted-Kryptografie.For more information about encryption types, see Always Encrypted Cryptography.

Die folgende Tabelle fasst die für verschlüsselte Spalten verfügbaren Funktionen zusammen – je nachdem, ob die Spalten Enclave-fähige Spaltenverschlüsselungsschlüssel und einen Verschlüsselungstyp verwenden.The following table summarizes the functionality available for encrypted columns, depending on whether the columns use enclave-enabled column encryption keys and an encryption type.

VorgangOperation Spalte ist NICHT Enclave-fähigColumn is NOT enclave-enabled Spalte ist NICHT Enclave-fähigColumn is NOT enclave-enabled Spalte ist Enclave-fähigColumn is enclave-enabled Spalte ist Enclave-fähigColumn is enclave-enabled
Verschlüsselung nach dem ZufallsprinzipRandomized encryption Deterministische VerschlüsselungDeterministic encryption Verschlüsselung nach dem ZufallsprinzipRandomized encryption Deterministische VerschlüsselungDeterministic encryption
Direkte VerschlüsselungIn-place encryption Nicht unterstütztNot Supported Nicht unterstütztNot Supported UnterstütztSupported UnterstütztSupported
GleichheitsvergleichEquality comparison Nicht unterstütztNot Supported Außerhalb der Enclave unterstütztSupported outside of the enclave Unterstützt (innerhalb der Enclave)Supported (inside the enclave) Außerhalb der Enclave unterstütztSupported outside of the enclave
Vergleichsoperatoren zusätzlich zum GleichheitsvergleichComparison operators beyond equality Nicht unterstütztNot Supported Nicht unterstütztNot Supported UnterstütztSupported Nicht unterstütztNot Supported
LIKELIKE Nicht unterstütztNot Supported Nicht unterstütztNot Supported UnterstütztSupported Nicht unterstütztNot Supported

Die direkte Verschlüsselung umfasst Unterstützung für die folgenden Vorgänge innerhalb der Enclave:In-place encryption includes support for the following operations inside the enclave:

  • Anfängliche Verschlüsselung von Daten, die in einer vorhandenen Spalte gespeichert sind.Initial encryption of data stored in an existing column.

  • Erneute Verschlüsselung von vorhandenen Daten in einer Spalte. Beispiele:Re-encrypting existing data in a column, for example:

    • Rotieren des Spaltenverschlüsselungsschlüssels (erneute Verschlüsselung der Spalte mit einem neuen Schlüssel).Rotating the column encryption key (re-encrypting the column with a new key).
    • Ändern des Verschlüsselungstyps.Changing the encryption type.
  • Entschlüsseln von Daten, die in einer verschlüsselten Spalte gespeichert sind (Konvertieren der Spalte in eine Klartextspalte).Decrypting data stored in an encrypted column (converting the column into a plaintext column).

Um die direkte Verschlüsselung zu ermöglichen, müssen die Spaltenverschlüsselungsschlüssel, die an den kryptografischen Vorgängen beteiligt sind, Enclave-fähig sein:For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • Anfängliche Verschlüsselung: Der Spaltenverschlüsselungsschlüssel für die zu verschlüsselnde Spalte muss Enclave-fähig sein.Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • Erneute Verschlüsselung: Sowohl der aktuelle als auch der neue Spaltenverschlüsselungsschlüssel (sofern Letzterer sich vom aktuellen Schlüssel unterscheidet) müssen Enclave-fähig sein.Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • Entschlüsselung: Der aktuelle Spaltenverschlüsselungsschlüssel der Spalte muss Enclave-fähig sein.Decryption: the current column encryption key of the column must be enclave-enabled.

Indizes für Enclave-fähige Spalten mit zufälliger VerschlüsselungIndexes on Enclave-enabled Columns using Randomized Encryption

Sie können nicht gruppierte Indizes auf Enclave-fähigen Spalten mit zufälliger Verschlüsselung erstellen, um umfangreiche Abfragen schneller ausführen zu können.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. Um sicherzustellen, dass ein mit zufälliger Verschlüsselung verschlüsselter Index in einer Spalte keine sensiblen Daten offenlegt und gleichzeitig für die Verarbeitung von Abfragen innerhalb der Enclave geeignet ist, werden die Schlüsselwerte in der Indexdatenstruktur (B-Struktur) nach ihren Klartextwerten verschlüsselt und sortiert.To ensure an index on a column encrypted using randomized encryption doesn't leak sensitive data and, at the same time, it's useful for processing queries inside the enclave, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. Wenn der Abfrageexecutor in der SQL Server-Engine einen Index auf einer verschlüsselten Spalte für Berechnungen innerhalb der Enclave verwendet, durchsucht er den Index nach bestimmten, in der Spalte gespeicherten Werten.When the query executor in the SQL Server Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. Bei jeder Suche werden möglicherweise mehrere Vergleiche ausgeführt.Each search may involve multiple comparisons. Der Abfrageexecutor delegiert jeden Vergleich an die Enclave, die einen in der Spalte gespeicherten Wert und den zu vergleichenden verschlüsselten Indexschlüsselwert entschlüsselt, den Vergleich im Klartext durchführt und das Ergebnis des Vergleichs an den Executor zurückgibt.The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor.

Das Erstellen von Indizes auf Spalten, die zufällige Verschlüsselung verwenden und nicht Enclave-fähig sind, wird weiterhin nicht unterstützt.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

Weitere Informationen finden Sie unter Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves.For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves. Allgemeine Informationen zur Funktionsweise der Indizierung in SQL Server, die nicht speziell für Always Encrypted gelten, finden Sie unter Beschreibung von gruppierten und nicht gruppierten Indizes.For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

DatenbankwiederherstellungDatabase Recovery

Wenn eine SQL Server-Instanz ausfällt, können ihre Datenbanken in einem Zustand verbleiben, in dem die Datendateien einige Änderungen durch unvollständige Transaktionen enthalten können.If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. Wenn die Instanz gestartet wird, führt sie einen Prozess namens Datenbankwiederherstellung aus, bei dem jede im Transaktionsprotokoll gefundene unvollständige Transaktion zurückgesetzt wird, um sicherzustellen, dass die Integrität der Datenbank erhalten bleibt.When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. Wenn eine unvollständige Transaktion Änderungen an einem Index vorgenommen hat, müssen diese ebenfalls rückgängig gemacht werden.If an incomplete transaction made any changes to an index, those changes also need to be undone. Beispielsweise müssen einige Schlüsselwerte im Index entfernt oder neu eingefügt werden.For example, some key values in the index may need to be removed or reinserted.

Wichtig

Microsoft empfiehlt dringend, die Schnellere Datenbankwiederherstellung (ADR) für Ihre Datenbank zu aktivieren, bevor Sie den ersten Index auf einer Enclave-fähigen Spalte verwenden, die mit zufälliger Verschlüsselung verschlüsselt wurde.Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption.

Beim herkömmlichen Datenbankwiederherstellungsprozess (gemäß dem ARIES-Wiederherstellungsmodell) muss SQL Server zum Rückgängigmachen einer Änderung an einem Index warten, bis eine Anwendung den Spaltenverschlüsselungsschlüssel für die Spalte an die Enclave übermittelt. Dies kann sehr lange dauern.With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. ADR reduziert die Anzahl der Vorgänge zum Rückgängigmachen von Änderungen, die verschoben werden müssen, da ein Spaltenverschlüsselungsschlüssel im Cache innerhalb der Enclave nicht verfügbar ist.ADR dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. Infolgedessen wird die Verfügbarkeit der Datenbank erheblich erhöht, indem die Wahrscheinlichkeit, dass eine neue Transaktion blockiert wird, minimiert wird.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. Wenn ADR aktiviert ist, benötigt SQL Server möglicherweise immer noch einen Spaltenverschlüsselungsschlüssel, um die Bereinigung alter Datenversionen abzuschließen, aber er erledigt dies als Hintergrundaufgabe, die sich nicht auf die Verfügbarkeit der Datenbank oder Benutzertransaktionen auswirkt.With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. Es kann jedoch vorkommen, dass Fehlermeldungen im Fehlerprotokoll angezeigt werden, die auf fehlgeschlagene Bereinigungsvorgänge aufgrund eines fehlenden Spaltenverschlüsselungsschlüssels hinweisen.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

Indizes auf Enclave-fähige Spalten mit deterministischer VerschlüsselungIndexes on Enclave-enabled Columns using Deterministic Encryption

Ein Index auf einer Spalte mit deterministischer Verschlüsselung wird basierend auf Chiffretext (nicht Klartext) sortiert, unabhängig davon, ob die Spalte Enclave-fähig ist oder nicht.An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

Überlegungen zur SicherheitSecurity Considerations

Die folgenden Sicherheitsaspekte sind für Always Encrypted mit Secure Enclaves zu beachten.The following security considerations apply to Always Encrypted with secure enclaves.

  • Die Sicherheit Ihrer Daten innerhalb der Enclave hängt von einem Nachweisprotokoll und einem Nachweisdienst ab.The security of your data inside the enclave depends on an attestation protocol and an attestation service. Daher müssen Sie sicherstellen, dass der Nachweisdienst und die Nachweisrichtlinien, die der Dienst durchsetzt, von einem vertrauenswürdigen Administrator verwaltet werden.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. Darüber hinaus unterstützen die Nachweisdienste in der Regel verschiedene Richtlinien und Nachweisprotokolle, von denen einige eine minimale Überprüfung der Enclave und ihrer Umgebung durchführen und für Test- und Entwicklungszwecke konzipiert sind.Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. Halten Sie sich genau an die für Ihren Nachweisdienst spezifischen Richtlinien, um sicherzustellen, dass Sie die empfohlenen Konfigurationen und Richtlinien für Ihre Produktionsumgebungen verwenden.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • Die Verschlüsselung einer Spalte mit zufälliger Verschlüsselung mit einem Enclave-fähigen CEK kann dazu führen, dass die Reihenfolge der in der Spalte gespeicherten Daten verloren geht, da solche Spalten Bereichsvergleiche unterstützen.Encrypting a column using randomized encryption with an enclave-enabled CEK may result in leaking the order of data stored in the column, as such columns support range comparisons. Wenn beispielsweise eine verschlüsselte Spalte, die Gehälter von Mitarbeitern enthält, einen Index verwendet, könnte ein böswilliger DBA den Index scannen, um den maximalen verschlüsselten Wert für das Gehalt zu finden und eine Person mit dem maximalen Gehalt zu identifizieren (vorausgesetzt, der Name der Person ist nicht verschlüsselt).For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Wenn Sie Always Encrypted verwenden, um sensible Daten vor unbefugtem Zugriff durch DBAs zu schützen, sollten Sie die Spaltenhauptschlüssel oder Spaltenverschlüsselungsschlüssel nicht an die DBAs weitergeben.If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. Ein DBA kann Indizes auf verschlüsselten Spalten verwalten, ohne direkten Zugriff auf die Schlüssel zu haben, indem er den Cache der Spaltenverschlüsselungsschlüssel innerhalb der Enclave nutzt.A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

Überlegungen zu Verfügbarkeitsgruppen und DatenbankmigrationConsiderations for Availability Groups and Database Migration

Bei der Konfiguration einer Always On-Verfügbarkeitsgruppe, die für die Unterstützung von Abfragen mit Enclaves erforderlich ist, müssen Sie sicherstellen, dass alle SQL Server-Instanzen, die die Datenbanken in der Verfügbarkeitsgruppe hosten, Always Encrypted mit Secure Enclaves unterstützen und eine Enclave konfiguriert ist.When configuring an Always On availability group that is required to support queries using enclaves, you need to ensure that all SQL Server instances hosting the databases in the availability group support Always Encrypted with secure enclaves and have an enclave configured. Wenn die primäre Datenbank Enclaves unterstützt, eine sekundäre Replik jedoch nicht, schlägt jede Abfrage fehl, die versucht, die Funktionalität von Always Encrypted mit Secure Enclaves zu nutzen.If the primary database supports enclaves, but a secondary replica does not, any query that attempts to use the functionality of Always Encrypted with secure enclaves will fail.

Wenn Sie eine Sicherungsdatei einer Datenbank wiederherstellen, die die Funktionalität von Always Encrypted mit Secure Enclaves auf einer SQL Server-Instanz verwendet, für die die Enclave nicht konfiguriert ist, wird der Wiederherstellungsvorgang erfolgreich durchgeführt, und alle Funktionen, die nicht auf die Enclave angewiesen sind, sind verfügbar.When you restore a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. Alle nachfolgenden Abfragen, die die Enclave-Funktionalität verwenden, schlagen jedoch fehl, und Indizes auf Enclave-fähigen Spalten mit zufälliger Verschlüsselung werden ungültig.However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. Dasselbe gilt, wenn Sie eine Datenbank mit Always Encrypted mit Secure Enclaves an die Instanz anfügen, für die die Enclave nicht konfiguriert ist.The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

Wenn Ihre Datenbank Indizes auf Enclave-fähigen Spalten mit zufälliger Verschlüsselung enthält, stellen Sie sicher, dass Sie die Schnellere Datenbankwiederherstellung (ADR) in der Datenbank aktivieren, bevor Sie eine Datenbanksicherung erstellen.If your database contains indexes on enclave-enabled columns using randomized encryption, make sure you enable Accelerated database recovery (ADR) in the database before creating a database backup. Mit ADR wird sichergestellt, dass die Datenbank, einschließlich der Indizes, sofort nach der Wiederherstellung der Datenbank verfügbar ist.ADR will ensure the database, including the indexes, is available immediately after you restore the database. Weitere Informationen finden Sie unter Datenbankwiederherstellung.For more information, see Database Recovery.

Wenn Sie Ihre Datenbank mit einer BBACPAC-Datei migrieren, müssen Sie sicherstellen, dass Sie alle Indizes auf Enclave-fähige Spalten mit randomisierter Verschlüsselung löschen, bevor Sie die BACPAC-Datei erstellen.When you migrate your database using a bacpac file, you need to make sure you drop all indexes enclave-enabled columns using randomized encryption before creating the bacpac file.

Bekannte EinschränkungenKnown Limitations

Always Encrypted mit Secure Enclaves adressiert einige Einschränkungen von Always Encrypted, indem die folgenden Vorgänge aktiviert werden:Always Encrypted with secure enclaves addresses some limitations of Always Encrypted, by enabling the following operations:

  • Direkte kryptografische Vorgänge.In-place cryptographic operations.
  • Musterabgleich (LIKE) und Vergleichsoperatoren für Spalten, die mithilfe der zufälligen Verschlüsselung verschlüsselt wurden.Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    Hinweis

    Die obigen Vorgänge werden für Zeichenfolgenspalten unterstützt, die Sortierungen mit einer binary2-Sortierreihenfolge (BIN2-Sortierungen) verwenden.The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). Zeichenfolgenspalten mit Nicht-BIN2-Sortierung können mit zufälliger Verschlüsselung und Enclave-fähigen Spaltenverschlüsselungsschlüsseln verschlüsselt werden.Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. Die einzige neue Funktionalität, die für solche Spalten aktiviert ist, ist jedoch die dirkte Verschlüsselung.However, the only new functionality that is enabled for such columns is in-place encryption.

  • Erstellen von nicht gruppierten Indizes und Statistiken für Spalten mit zufälliger VerschlüsselungCreating nonclustered indexes and statistics on columns using randomized encryption.

Alle anderen Einschränkungen für Always Encrypted, die unter den Featuredetails aufgeführt sind, gelten auch für Always Encrypted mit Secure Enclaves.All other limitations for Always Encrypted listed at Feature Details also apply to Always Encrypted with secure enclaves.

Die folgenden Einschränkungen sind für Always Encrypted mit Secure Enclaves zu beachten:The following limitations are specific to Always Encrypted with secure enclaves:

  • Gruppierte Indizes können nicht auf Enclave-fähigen Spalten mit zufälliger Verschlüsselung erstellt werden.Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • Enclave-fähige Spalten mit zufälliger Verschlüsselung können keine Primärschlüsselspalten sein und können nicht durch Fremdschlüsselbeschränkungen oder eindeutige Schlüsselbeschränkungen referenziert werden.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • Nur Joins geschachtelter Schleifen (mit Indizes, falls verfügbar) werden für Enclave-fähige Spalten mit zufälliger Verschlüsselung unterstützt.Only nested loop joins (using indexes, if available) are supported on enclave-enabled columns using randomized encryption. Hashjoins und zusammengeführte Joins werden nicht unterstützt.Hash joins and merged joins are not supported.
  • Direkte Verschlüsselungsvorgänge können nicht mit anderen Änderungen an Spaltenmetadaten kombiniert werden. Ausgenommen hiervon sind Änderungen einer Sortierung innerhalb derselben Codeseite und der NULL-Zulässigkeit.In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. Beispiel: Sie können nicht in einer einzigen ALTER TABLE/ALTER COLUMN-Transact-SQL-Anweisung eine Spalte verschlüsseln, erneut verschlüsseln oder entschlüsseln UND den Datentyp der Spalte ändern.For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE/ALTER COLUMN Transact-SQL statement. Sie müssen zwei separate Anweisungen verwenden.Use two separate statements.
  • Die Verwendung von Enclave-fähigen Schlüsseln für Spalten in In-Memory-Tabellen wird nicht unterstützt.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • Ausdrücke, die berechnete Spalten definieren, können keine Berechnungen für enclave-fähige Spalten mit zufallsbasierter Verschlüsselung durchführen (auch wenn es sich bei den Berechnungen um LIKE- und Bereichsvergleiche handelt).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are LIKE and range comparisons).
  • Escapezeichen werden in Parametern des LIKE-Operators in Enclave-fähigen Spalten, die zufällige Verschlüsselung verwenden, nicht unterstützt.Escape characters are not supported in parameters of the LIKE operator on enclave-enabled columns using randomized encryption.
  • Abfragen mit dem LIKE-Operator oder einem Vergleichsoperator, der einen Abfrageparameter mit einem der folgenden Datentypen hat (die nach der Verschlüsselung zu großen Objekten werden), ignorieren Indizes und führen Tabellenscans durch.Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • nchar[n] und nvarchar[n], wenn n größer als 3967 ist.nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n], varchar[n], binary[n], varbinary[n], wenn n größer als 7935 ist.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • Tooleinschränkungen:Tooling limitations:
    • Die einzigen unterstützten Schlüsselspeicher für Enclave-fähige Spaltenhauptschlüssel sind Windows Certificate Store und Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.
    • Importieren/Exportieren von Datenbanken mit Enclave-fähigen Schlüsseln wird nicht unterstützt.Importing/exporting databases containing enclave-enabled keys is not supported.
    • Um einen direkten kryptografischen Vorgang über eine ALTER TABLE/ALTER COLUMN-Anweisung auszulösen, müssen Sie die Anweisung über ein Abfragefenster in SSMS ausgeben. Alternativ dazu können Sie selbst ein Programm schreiben, das die Anweisung ausgibt.To trigger an in-place cryptographic operation via ALTER TABLE/ALTER COLUMN, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. Das Cmdlet „Set-SqlColumnEncryption“ im SQL Server-PowerShell-Modul und der Always Encrypted-Assistent in SQL Server Management Studio unterstützen derzeit die direkte Verschlüsselung nicht. Beide Tools verschieben derzeit die Daten aus der Datenbank, um kryptografische Vorgänge auszuführen – auch dann, wenn die für die Vorgänge verwendeten Spaltenverschlüsselungsschlüssel Enclave-fähig sind.Currently, the Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption - they move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.

Nächste SchritteNext steps

Weitere InformationenSee also