Always Encrypted

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Diagramm von „Always Encrypted“.

Always Encrypted und Always Encrypted mit Secure Enclaves sind Features, die vertrauliche Daten, darunter Kreditkartennummern und nationale oder regionale Kennnummern (wie US-Sozialversicherungsnummern), in Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Server-Datenbanken schützen sollen. Mit ihrer Hilfe können Clients vertrauliche Daten in Clientanwendungen verschlüsseln, damit Schlüssel niemals der Datenbank-Engine verfügbar gemacht werden. Damit erfolgt eine Trennung zwischen denjenigen, die die Daten besitzen und diese anzeigen können, und denjenigen, die die Daten verwalten, aber keinen Zugriff haben sollen: Administrator*innen lokaler Datenbanken, Betreiber*innen von Clouddatenbanken oder andere unbefugte Benutzer*innen mit hoher Berechtigung. Daher ermöglicht Always Encrypted es Kund*innen, ihre vertraulichen Daten in der Cloud sicher zu speichern, wodurch das Risiko des Datendiebstahls durch böswillige Insider verringert wird.

Always Encrypted hat bestimmte Einschränkungen, z. B. können keine Vorgänge für verschlüsselte Daten ausgeführt werden, einschließlich Sortieren, Filtern (mit Ausnahme von Punktsuchvorgängen mit deterministischer Verschlüsselung) usw. Das bedeutet, dass einige Abfragen und Anwendungen möglicherweise nicht mit Always Encrypted kompatibel sind oder u. U. erhebliche Änderungen an der Anwendungslogik erfordern.

Zur Umgehung dieser Einschränkungen kann die Datenbank-Engine mithilfe von Always Encrypted mit Secure Enclaves verschlüsselte Daten in einem geschützten Speicherbereich verarbeiten, der als Secure Enclave (sichere Enklave) bezeichnet wird. Secure Enclaves erweitern die Funktionen des vertraulichen Computings von Always Encrypted durch Unterstützung für den Musterabgleich, für verschiedene Vergleichsoperatoren und für die direkte Verschlüsselung.

Mit Always Encrypted wird sichergestellt, dass die Verschlüsselung für Anwendungen nahtlos erfolgt. Clientseitig verschlüsselt der für Always Encrypted aktivierte Treiber vertrauliche Daten, bevor er sie an die Datenbank-Engine sendet, und schreibt Abfragen automatisch um, um die Anwendungssemantik beizubehalten. Außerdem entschlüsselt er automatisch Abfrageergebnisse aus verschlüsselten Datenbankspalten.

Konfigurieren von Always Encrypted

Hinweis

Bei Anwendungen, die einen Musterabgleich ausführen, Vergleichsoperatoren, die Sortierung und die Indizierung für verschlüsselte Spalten verwenden müssen, sollten Sie Always Encrypted mit Secure Enclaves implementieren.

Dieser Abschnitt enthält eine Übersicht über das Einrichten von Always Encrypted. Ausführliche Informationen und erste Schritte finden Sie im Tutorial: Erste Schritte mit Always Encrypted.

Gehen Sie wie folgt vor, um Always Encrypted in der Datenbank zu konfigurieren:

  1. Stellen Sie kryptografische Schlüssel bereit, um Ihre Daten zu schützen. Always Encrypted nutzt zwei Arten von Schlüsseln:

    • Spaltenverschlüsselungsschlüssel.
    • Spaltenhauptschlüssel.

    Die Daten in einer verschlüsselten Spalte werden mit einem Spaltenschlüssel verschlüsselt. Ein Spaltenhauptschlüssel ist ein Schlüssel zum Schutz von Schlüsseln, der einen oder mehrere Spaltenverschlüsselungsschlüssel verschlüsselt.

    Sie müssen Spaltenhauptschlüssel in einem vertrauenswürdigen Schlüsselspeicher außerhalb des Datenbanksystems speichern, z. B. Azure Key Vault, Windows-Zertifikatspeicher oder einem Hardwaresicherheitsmodul. Danach sollten Sie Spaltenschlüssel bereitstellen und jeden mit einem Spaltenhauptschlüssel verschlüsseln.

    Schließlich speichern Sie die Metadaten zu den Schlüsseln in der Datenbank. Die Metadaten des Spaltenhauptschlüssels umfassen den Speicherort des Spaltenhauptschlüssels. Die Metadaten des Spaltenverschlüsselungsschlüssels enthalten den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels. Die Datenbank-Engine speichert und nutzt keine Schlüssel in Klartext.

    Weitere Informationen zum Verwalten von Always Encrypted-Schlüsseln finden Sie unter Übersicht über die Schlüsselverwaltung für Always Encrypted.

  2. Richten Sie die Verschlüsselung für bestimmte Datenbankspalten ein, die vertrauliche Informationen enthalten, um deren Schutz zu gewährleisten. Dazu müssen Sie unter Umständen neue Tabellen mit verschlüsselten Spalten erstellen oder die vorhandenen Spalten und Daten verschlüsseln. Beim Konfigurieren der Verschlüsselung für eine Spalte müssen Sie Details zum Verschlüsselungsalgorithmus, den Spaltenschlüssel zum Schutz der Daten und die Art der Verschlüsselung angeben. Always Encrypted unterstützt zwei Verschlüsselungsarten:

    • Bei der deterministischen Verschlüsselung wird für jeden Wert in Klartext immer derselbe verschlüsselte Wert generiert. Die deterministische Verschlüsselung ermöglicht die Punktsuche, Gleichheitsverknüpfung, Gruppierung und Indizierung für verschlüsselte Spalten. Sie erlaubt jedoch auch, dass nicht autorisierte Benutzer Informationen zu verschlüsselten Werten erraten, indem sie die Muster in der verschlüsselten Spalte untersucht, insbesondere wenn es eine kleine Anzahl von möglichen verschlüsselten Werten wie TRUE/FALSE oder die Region Norden/Süden/Osten/Westen gibt.

    • Bei der randomisierten Verschlüsselung kommt eine Methode zum Einsatz, die Daten auf unvorhersagbare Weise verschlüsselt. Jede identische Klartext-Eingabe führt zu einer eigenen verschlüsselten Ausgabe. Dadurch wird die Sicherheit der randomisierten Verschlüsselung erhöht.

Für den Musterabgleich mit Vergleichsoperatoren, die Sortierung und die Indizierung für verschlüsselte Spalten, sollten Sie Always Encrypted mit Secure Enclaves implementieren und die randomisierte Verschlüsselung anwenden. Die randomisierte Verschlüsselung von Always Encrypted (ohne Secure Enclaves) unterstützt keine Suche, Gruppierung, Indizierung oder Verknüpfung für verschlüsselte Spalten. Für Spalten, die für Such- oder Gruppierungszwecke vorgesehen sind, muss stattdessen die deterministische Verschlüsselung verwendet werden. Das ermöglicht Vorgänge wie Punktsuchvorgänge, Gleichheitsverknüpfungen, die Gruppierung und die Indizierung für verschlüsselte Spalten.

Da das Datenbanksystem konzeptionsbedingt keinen Zugriff auf kryptografische Schlüsseln hat, müssen für Spaltenverschlüsselungen Daten aus der Datenbank verschoben und außerhalb verschlüsselt werden. Das bedeutet, dass dieser Verschlüsselungsvorgang lange dauern kann und anfällig für Netzwerkunterbrechungen ist. Wenn Sie eine Spalte später erneut verschlüsseln müssen, z. B. beim Wechseln des Schlüssels oder beim Ändern von Verschlüsselungsarten, treten die gleichen Schwierigkeiten erneut auf. Durch die Nutzung von Always Encrypted mit Secure Enclaves entfällt die Notwendigkeit, Daten aus der Datenbank zu verschieben. Da die Enclave vertrauenswürdig ist, kann ein Clienttreiber in einer Anwendung oder einem Tool wie Azure Data Studio oder SQL Server Management Studio (SSMS) die Schlüssel während kryptografischer Vorgänge sicher mit der Enclave austauschen. Die Enklave kann dann Spalten an Ort und Stelle (erneut) verschlüsseln, wodurch die dafür benötigte Zeit erheblich verringert wird.

Informationen zu kryptografischen Algorithmen von Always Encrypted finden Sie unter Always Encrypted-Kryptografie.

Sie können die obigen Schritte mit SQL-Tools ausführen:

Damit Always Encrypted-Schlüssel und geschützte vertrauliche Daten in der Datenbankumgebung nie in Klartext offengelegt werden, darf die Datenbank-Engine nicht an der Schlüsselbereitstellung oder der Ausführung von Vorgängen zur Datenverschlüsselung oder -entschlüsselung beteiligt werden. Daher unterstützt Transact-SQL (T-SQL) keine Vorgänge zur Schlüsselbereitstellung oder kryptografischen Vorgänge. Aus demselben Grund muss das Verschlüsseln vorhandener Daten oder das erneute Verschlüsseln (mit einem anderen Verschlüsselungstyp oder einem Spaltenverschlüsselungsschlüssel) außerhalb der Datenbank ausgeführt werden (dies kann mit SQL-Tools automatisiert werden).

Führen Sie nach der Änderung der Definition einer verschlüsselten Spalte sp_refresh_parameter_encryption aus, um die Always Encrypted-Metadaten für das Objekt zu aktualisieren.

Begrenzungen

Die folgenden Einschränkungen gelten für Abfragen für verschlüsselte Spalten:

  • Es sind keine Berechnungen für Spalten zulässig, die mit randomisierter Verschlüsselung verschlüsselt wurden. Die deterministische Verschlüsselung unterstützt die folgenden Vorgänge mit Vergleichen auf Gleichheit – andere Vorgänge sind nicht zulässig.

    Hinweis

    Bei Anwendungen, die einen Musterabgleich ausführen, Vergleichsoperatoren, die Sortierung und die Indizierung für verschlüsselte Spalten verwenden müssen, sollten Sie Always Encrypted mit Secure Enclaves implementieren.

  • Abfrageanweisungen, die Berechnungen mit Klartext- und verschlüsselten Daten auslösen, sind nicht zulässig. Zum Beispiel:

    • Vergleichen einer verschlüsselten Spalte mit einer Klartextspalte oder einem Literal
    • Kopieren von Daten aus einer Klartextspalte in eine verschlüsselte Spalte (oder umgekehrt) mit UPDATE, BULK INSERT, SELECT INTO oder INSERT..SELECT.
    • Einfügen von Literalen in verschlüsselte Spalten

    Solche Anweisungen führen zu Fehlern durch Operandenkonflikte wie diesem:

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    

    Anwendungen müssen Werte für verschlüsselte Spalten mithilfe von Abfrageparametern bereitstellen. Wenn Sie beispielsweise Daten in verschlüsselte Spalten einfügen oder sie mithilfe deterministischer Verschlüsselung filtern, sollten Abfrageparameter verwendet werden. Das Übergeben von Literalen oder T-SQL-Variablen, die verschlüsselten Spalten entsprechen, wird nicht unterstützt. Weitere spezifische Informationen zu einzelnen Clienttreibern finden Sie unter Entwickeln von Anwendungen mithilfe von Always Encrypted.

    In Azure Data Studio oder SSMS muss die Parametrisierung für Always Encrypted-Variablen angewendet werden, um Abfragen auszuführen, die mit verschlüsselten Spalten zusammenhängende Werte verarbeiten. Dazu gehören Szenarien wie das Einfügen von Daten in verschlüsselte Spalten oder das Anwenden von Filtern auf Spalten (in Fällen, in denen die deterministische Verschlüsselung genutzt wird).

  • Tabellenwertparameter, die auf verschlüsselte Spalten ausgerichtet sind, werden nicht unterstützt

  • Abfragen, die die folgenden Klauseln verwenden, werden nicht unterstützt:

  • Always Encrypted wird für die Spalten mit den folgenden Merkmalen nicht unterstützt:

    • Spalten, die einen der folgenden Datentypen verwenden; xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, Alias, benutzerdefinierte Typen.
    • FILESTREAM-Spalten
    • Spalten mit der IDENTITY-Eigenschaft
    • Spalten mit der ROWGUIDCOL-Eigenschaft
    • Zeichenfolgenspalten (varchar, char usw.) mit anderen Sortierungen als binärem Codepunkt (_BIN2) bei Verwendung der deterministischen Verschlüsselung
    • Spalten, die bei Verwendung der Zufallsverschlüsselung Schlüssel für gruppierte und nicht gruppierte Indizes darstellen (Indizes in Spalten mit deterministischer Verschlüsselung werden unterstützt)
    • In Volltextindizes einbezogene Spalten (Always Encrypted unterstützt keine Volltextsuche).
    • Geben Sie berechnete Spalten in einer Tabelle an.
    • Spalten, auf die berechnete Spalten verweisen (wenn der Ausdruck nicht unterstützte Vorgänge für Always Encrypted ausführt)
    • Verwenden Sie Spalten mit geringer Dichte.
    • Spalten, auf die bei Verwendung der zufälligen Verschlüsselung von Statistiken verwiesen wird (deterministische Verschlüsselung wird unterstützt)
    • Partitionierungsspalten
    • Spalten mit standardmäßigen Einschränkungen.
    • Spalten, auf die Unique-Einschränkungen verweisen, wenn die zufällige Verschlüsselung verwendet wird (deterministische Verschlüsselung wird unterstützt)
    • Primärschlüsselspalten, wenn die zufällige Verschlüsselung verwendet wird (deterministische Verschlüsselung wird unterstützt)
    • Verweisende Spalten in Fremdschlüsseleinschränkungen bei Verwendung der zufälligen Verschlüsselung oder bei Verwendung der deterministischen Verschlüsselung, falls die referenzierten und die verweisenden Spalten verschiedene Schlüssel oder Algorithmen verwenden
    • Spalten, auf die Check-Einschränkungen verweisen.
    • Spalten, die mithilfe von Change Data Capture erfasst oder nachverfolgt werden
    • Primärschlüsselspalten in Tabellen mit Änderungsnachverfolgung.
    • Spalten, die maskiert werden (mithilfe der dynamischen Datenmaskierung).
    • Spalten in Stretchdatenbanktabellen (Tabellen mit Spalten, die mit Always Encrypted verschlüsselt sind, können für Stretch aktiviert werden.)

    Wichtig

    Stretch Database ist in SQL Server 2022 (16.x) und der Azure SQL-Datenbank veraltet. Diese Funktion wird in einer zukünftigen Version der Datenbank-Engine entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.

    • Spalten in externen (PolyBase)-Tabellen (Hinweis: Die Verwendung von externen Tabellen und Tabellen mit verschlüsselten Spalten in der gleichen Abfrage wird unterstützt)
  • Die folgenden Funktionen funktionieren nicht bei verschlüsselten Spalten:

Transact-SQL-Referenz für Always Encrypted

Always Encrypted verwendet die folgenden Transact-SQL-Anweisungen, Systemkatalogsichten, gespeicherten Systemprozeduren und Berechtigungen.

Aufstellungen

DDL-Anweisung Beschreibung
CREATE COLUMN MASTER KEY Erstellt ein Spaltenhauptschlüssel-Metadatenobjekt in einer Datenbank.
DROP COLUMN MASTER KEY Entfernt einen Spaltenhauptschlüssel aus einer Datenbank.
CREATE COLUMN ENCRYPTION KEY Erstellt ein neues Spaltenschlüssel-Metadatenobjekt.
ALTER COLUMN ENCRYPTION KEY Ändert durch das Hinzufügen oder Entfernen eines verschlüsselten Werts einen Spaltenverschlüsselungsschlüssel (Column encryption key, CEK) in einer Datenbank.
DROP COLUMN ENCRYPTION KEY Entfernt einen Spaltenverschlüsselungsschlüssel (Column Encryption Key, CEK) aus der Datenbank.
CREATE TABLE (ENCRYPTED WITH) Legt das Verschlüsseln von Spalten fest.

Systemkatalogsichten und gespeicherte Prozeduren

Systemkatalogsichten und gespeicherte Prozeduren Beschreibung
sys.column_encryption_keys Gibt Informationen zu Spaltenschlüsseln zurück.
sys.column_encryption_key_values Gibt Informationen zu verschlüsselten Werten von Spaltenschlüsseln zurück.
sys.column_master_keys Gibt eine Zeile für jeden Datenbank-Hauptschlüssel zurück.
sp_refresh_parameter_encryption Aktualisiert die Always Encrypted-Metadaten für die Parameter der angegebenen nicht schemagebundenen gespeicherten Prozedur, der benutzerdefinierten Funktion, der Ansicht, des DML-Triggers, des DDL-Triggers auf Datenbankebene oder des DDL-Triggers auf Serverebene.
sp_describe_parameter_encryption Analysiert die angegebene Transact-SQL-Anweisung und deren Parameter, um festzustellen, welche Parameter Datenbankspalten entsprechen, die mithilfe des Always Encrypted-Features geschützt sind.

Informationen zu Verschlüsselungsmetadaten, die für die einzelnen Spalten gespeichert werden, finden Sie auch unter sys.columns.

Datenbankberechtigungen

Es gibt vier Datenbankberechtigungen für Always Encrypted.

Systemkatalogsichten und gespeicherte Prozeduren Beschreibung
ALTER ANY COLUMN MASTER KEY Zum Erstellen und Löschen der Metadaten des Spaltenhauptschlüssels erforderlich.
ALTER ANY COLUMN ENCRYPTION KEY Zum Erstellen und Löschen der Metadaten des Spaltenschlüssels erforderlich.
VIEW ANY COLUMN MASTER KEY DEFINITION Zum Abrufen und Lesen der Metadaten des Spaltenhauptschlüssels erforderlich, der zum Abfragen verschlüsselter Spalten benötigt wird.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION Zum Abrufen und Lesen der Metadaten des Spaltenschlüssels erforderlich, der zum Abfragen verschlüsselter Spalten benötigt wird.

In der folgenden Tabelle werden die erforderlichen Berechtigungen für häufig verwendete Aktionen zusammengefasst.

Szenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Schlüsselverwaltung (Erstellen/Ändern/Überprüfen von Schlüsselmetadaten in der Datenbank) X X X X
Abfragen von verschlüsselten Spalten X X

Wichtige Hinweise

  • Die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION sind erforderlich, wenn verschlüsselte Spalten ausgewählt werden, auch wenn das Benutzerkonto nicht über die Berechtigung für die Spaltenhauptschlüssel (in seinen Schlüsselspeichern) verfügt, um die Spalten zu schützen und einen Klartextzugriff zu verhindern.

  • In SQL Server sind die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION standardmäßig der öffentlichen festen Datenbankrolle zugewiesen. Datenbankadministratoren/-administratorinnen können die Berechtigungen der öffentlichen Rolle aufheben und sie bestimmten Rollen oder Benutzerkonten gewähren, um mehr eingeschränkte Steuerung zu implementieren.

  • In SQL-Datenbank sind die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION standardmäßig der öffentlichen festen Datenbankrolle nicht zugewiesen. Dadurch können bestimmte vorhandene Legacytools (die ältere Versionen von DacFx verwenden) ordnungsgemäß funktionieren. Datenbankadministratoren/-administratorinnen müssen explizit die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION zuweisen, um mit verschlüsselten Spalten zu arbeiten (auch wenn sie nicht entschlüsselt werden).

Nächster Schritt