Always Encrypted

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Azure SQL Managed Instance

Diagramm der Always Encrypted.

Always Encrypted ist ein Feature zum Schutz vertraulicher Daten wie Kreditkartennummern oder nationaler Identifikationsnummern (z. B. US-Sozialversicherungsnummern), die in Azure SQL Datenbank, Azure SQL Managed Instance und SQL Server Datenbanken gespeichert sind. Always Encrypted ermöglicht Es Clients, vertrauliche Daten in Clientanwendungen zu verschlüsseln und die Verschlüsselungsschlüssel nie der Datenbank-Engine preiszugeben. Dies bietet eine Trennung zwischen den Besitzern der Daten und deren Ansicht, und denen, die die Daten verwalten, aber keinen Zugriff haben sollten : lokale Datenbankadministratoren, Clouddatenbankbetreiber oder andere nicht autorisierte Benutzer mit hohen Berechtigungen. Daher ermöglicht Always Encrypted Kunden, ihre vertraulichen Daten sicher in der Cloud zu speichern und die Wahrscheinlichkeit von Datendiebstahl durch böswillige Insider zu verringern.

Always Encrypted können so konfiguriert werden, dass eingeschränkte vertrauliche Abfragen für verschlüsselte Daten unterstützt werden, die Abfragen, die Gleichheitsvergleiche beinhalten. Beispiel: Punktsuche oder Gleichheitsbeitritte. Solche Abfragen nutzen die deterministische Verschlüsselung.

Hinweis

Sichere Enklaven erweitern die Funktionen des vertraulichen Computings von Always Encrypted durch Musterabgleich, andere Vergleichsoperatoren und direkte Verschlüsselung. Weitere Informationen finden Sie unter Always Encrypted mit Secure Enclaves.

Always Encrypted macht die Verschlüsselung den Anwendungen gegenüber transparent. Ein auf dem Clientcomputer installierter Treiber, bei dem Always Encrypted aktiviert ist, erreicht dies durch die automatische Ver- und Entschlüsselung von sensiblen Daten in der Clientanwendung. Der Treiber verschlüsselt die Daten in vertraulichen Spalten, bevor er sie an Datenbank-Engineweitergibt, und schreibt Abfragen automatisch neu, sodass die Semantik der Anwendung beibehalten wird. Analog dazu werden in verschlüsselten Datenbankspalten gespeicherte Daten aus Abfrageergebnissen durch den Treiber transparent entschlüsselt.

Konfigurieren von Always Encrypted

Dieser Abschnitt bietet eine Übersicht über die Einrichtung Always Encrypted. Ausführliche Informationen und erste Schritte finden Sie unter Tutorial: Erste Schritte mit Always Encrypted.

Um Always Encrypted in Ihrer Datenbank einzurichten, müssen Sie Folgendes ausführen:

  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.

    Ein Spaltenverschlüsselungsschlüssel wird verwendet, um Daten in einer verschlüsselten Spalte zu verschlüsseln. 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 ein Hardwaresicherheitsmodul.

    Anschließend müssen Sie Spaltenverschlüsselungsschlüssel bereitstellen und jeden mit einem Spaltenhauptschlüssel verschlüsseln.

    Schließlich müssen Sie die Metadaten zu den Schlüsseln in Ihrer Datenbank speichern.

    • Die Spaltenhauptschlüsselmetadaten erfassen den Speicherort des Spaltenhauptschlüssels.
    • Die Spaltenverschlüsselungsschlüsselmetadaten enthalten den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels. Datenbank-Engine speichert oder verwendet die Schlüssel beider Typen nie im Klartext.

    Weitere Informationen zum Verwalten Always Encrypted Schlüssel finden Sie unter Übersicht über die Schlüsselverwaltung für Always Encrypted

  2. Konfigurieren Sie die Verschlüsselung für ausgewählte Datenbankspalten , die vertrauliche Daten enthalten, die geschützt werden sollen. Dies kann das Erstellen neuer Tabellen mit verschlüsselten Spalten oder das Verschlüsseln vorhandener Datenbankspalten und vorhandener Daten umfassen. Beim Einrichten der Verschlüsselung für eine Spalte geben Sie die Informationen zu einem Verschlüsselungsalgorithmus, einem Spaltenverschlüsselungsschlüssel zum Schutz der Daten in der Spalte und einem Verschlüsselungstyp an. Always Encrypted unterstützt zwei Verschlüsselungstypen:

    • Die deterministische Verschlüsselung generiert immer denselben verschlüsselten Wert für einen bestimmten Klartextwert. Die deterministische Verschlüsselung ermöglicht die Punktsuche, Gleichheitsverknüpfung, Gruppierung und Indizierung in verschlüsselten 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.

    • Diezufällige Verschlüsselung verwendet eine Methode, die Daten in einer weniger vorhersagbaren Weise verschlüsselt. Die zufällige Verschlüsselung ist sicherer, verhindert aber die Suche, Gruppierung, Indizierung und Verknüpfung für verschlüsselte Spalten.

    Verwenden Sie die deterministische Verschlüsselung für Spalten, die als Such- oder Gruppierungsparameter verwendet werden, wie z. B. eine Personalausweisnummer. Verwenden Sie die zufällige Verschlüsselung für Daten wie beispielsweise Kommentare zu vertraulichen Untersuchungen, die nicht mit anderen Datensätzen gruppiert oder für die Verknüpfung mit anderen Tabellen verwendet werden.

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

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

Um sicherzustellen, dass Always Encrypted Schlüssel und geschützten vertraulichen Daten niemals im Klartext für die Datenbankumgebung offengelegt werden, kann die Datenbank-Engine nicht an Schlüsselbereitstellungs- und Datenverschlüsselungs- oder Entschlüsselungsvorgängen beteiligt werden. Daher unterstützt Transact-SQL (T-SQL) keine Schlüsselbereitstellung oder kryptografische Vorgänge. Aus dem gleichen Grund muss das Verschlüsseln vorhandener Daten oder die erneute Verschlüsselung (mit einem anderen Verschlüsselungstyp oder einem Spaltenverschlüsselungsschlüssel) außerhalb der Datenbank erfolgen (SQL-Tools können dies automatisieren).

Hinweis

Always Encrypted mit sicheren Enklaven hebt einige der oben genannten Einschränkungen auf, indem kryptografische Vorgänge für vorhandene Daten mithilfe von T-SQL zugelassen werden, und es entfällt die Notwendigkeit, die Daten außerhalb der Datenbank zu verschieben.

Funktionsweise von Abfragen für verschlüsselte Spalten

Um eine Abfrage für verschlüsselte Datenbankspalten auszuführen, Daten in verschlüsselte Spalten einzufügen, Klartextwerte aus verschlüsselten Spalten abzurufen oder unterstützte Vorgänge (z. B. Punktsuche) für Spalten mit deterministischer Verschlüsselung auszuführen, muss ein Benutzer oder eine Anwendung, die die Abfrage ausgibt, die folgenden Voraussetzungen erfüllen:

  • Haben Sie Zugriff auf den Spaltenhauptschlüssel, der die Daten schützt. Schlüsselzugriff ist zusätzlich zu den Berechtigungen auf Datenbankebene erforderlich, z SELECT . B. für die Tabelle, die die Daten enthält.
  • Stellen Sie eine Verbindung mit der Datenbank her, wenn Always Encrypted in der Datenbankverbindung aktiviert ist. Die meisten SQL-Tools und SQL-Clienttreiber unterstützen das Aktivieren von Always Encrypted für Datenbankverbindungen.

Hinweis

Wenn der Benutzer über Datenbankberechtigungen zum Lesen der Daten, aber keinen Zugriff auf die Schlüssel verfügt, die sie schützen, kann der Benutzer weiterhin cyphertext(verschlüsselte) Daten abrufen, indem er eine Verbindung mit der Datenbank herstellt, ohne Always Encrypted in der Datenbankverbindung zu aktivieren.

So funktionieren Abfragen für verschlüsselte Spalten:

  1. Wenn eine Anwendung eine parametrisierte Abfrage ausgibt, kontaktiert der SQL-Clienttreiber innerhalb der Anwendung transparent die Datenbank-Engine (durch Aufruf sp_describe_parameter_encryption (Transact-SQL), um zu bestimmen, welche Parameter auf verschlüsselte Spalten abzielen und verschlüsselt werden sollen. Für jeden Parameter, der verschlüsselt werden muss, empfängt der Treiber den Verschlüsselungsalgorithmus, den Verschlüsselungstyp und die Schlüsselmetadaten, einschließlich des verschlüsselten Spaltenverschlüsselungsschlüssels und des Speicherorts des entsprechenden Spaltenhauptschlüssels.
  2. Der Treiber ruft den Schlüsselspeicher auf, der Spaltenhauptschlüssel enthält, um die Verschlüsselten Spaltenverschlüsselungsschlüsselwerte zu entschlüsseln. Die resultierenden Verschlüsselungsschlüssel für Klartextspalten werden zwischengespeichert, um die Anzahl von Roundtrips zum Schlüsselspeicher bei nachfolgenden Verwendungen derselben Spaltenverschlüsselungsschlüssel zu reduzieren.
  3. Der Treiber verwendet die erhaltenen Klartextspaltenverschlüsselungsschlüssel, um die Abfrageparameter zu verschlüsseln, die verschlüsselten Spalten entsprechen.
  4. Der Treiber ersetzt die Klartextwerte der Parameter, die auf verschlüsselte Spalten abzielen, durch ihre verschlüsselten Werte und sendet die Abfrage zur Verarbeitung an die Datenbank-Engine.
  5. Die Datenbank-Engine führt die Abfrage aus. Dies kann Gleichheitsvergleiche für Spalten mithilfe der deterministischen Verschlüsselung beinhalten.
  6. Wenn Abfrageergebnisse Daten aus verschlüsselten Spalten enthalten, fügt die Datenbank-Engine verschlüsselungsmetadaten für jede Spalte an, einschließlich der Informationen über den Verschlüsselungsalgorithmus, den Verschlüsselungstyp und schlüsselmetadaten an das Resultset.
  7. Datenbank-Engine sendet das Resultset an die Clientanwendung.
  8. Für jede verschlüsselte Spalte im empfangenen Resultset versucht der Treiber zunächst, den Verschlüsselungsschlüssel der Klartextspalte im lokalen Cache zu finden, und macht nur einen Roundtrip zu einem Schlüsselspeicher mit dem Spaltenhauptschlüssel, wenn er den Schlüssel nicht im Cache finden kann.
  9. Der Treiber entschlüsselt die Ergebnisse und gibt Klartextwerte an die Anwendung zurück.

Ein Clienttreiber interagiert mit einem Schlüsselspeicher, der einen Spaltenhauptschlüssel enthält, indem er einen Speicheranbieter für den Spaltenhauptschlüssel verwendet. Dies ist eine clientseitige Softwarekomponente, die einen Schlüsselspeicher einkapselt, der den Spaltenhauptschlüssel enthält. Anbieter für gängige Typen von Schlüsselspeichern sind in clientseitigen Treiberbibliotheken von Microsoft oder als eigenständige Downloads verfügbar. Sie können auch einen eigenen Anbieter implementieren. Die Funktionen von Always Encrypted, einschließlich integrierte Speicheranbieter für Spaltenhauptschlüssel, variieren je nach Treiberbibliothek und deren Version.

Unter Entwickeln von Anwendungen mit Always Encrypted finden Sie eine Liste der Clienttreiber, die Always Encrypted unterstützen, und Informationen zum Entwickeln von Anwendungen, die verschlüsselte Spalten abfragen.

Sie können verschlüsselte Spalten auch mithilfe von SQL-Tools abfragen, z. B. Azure Data Studio oder SSMS.

Einschränkungen

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

  • Die deterministische Verschlüsselung unterstützt die folgenden Vorgänge, die Gleichheitsvergleiche umfassen– es sind keine anderen Vorgänge zulässig.

  • Es sind keine Berechnungen für Spalten zulässig, die mit randomisierter Verschlüsselung verschlüsselt wurden.

    Hinweis

    Always Encrypted mit sicheren Enklaven lockert die obige Einschränkung, indem Musterabgleich, Vergleichsoperatoren, Sortierung und Indizierung für Spalten mithilfe der randomisierten Verschlüsselung zugelassen werden.

  • Abfrageanweisungen, die Berechnungen auslösen, die sowohl Klartext als auch verschlüsselte Daten betreffen, sind nicht zulässig. Beispiel:

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

    Solche Anweisungen führen zu Operandenkonfliktfehlern wie den folgenden:

    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 Abfrageparameter verwenden, um Werte zu übergeben, die verschlüsselten Spalten entsprechen. Beispielsweise beim Einfügen von Daten in verschlüsselte Spalten oder beim Filtern nach verschlüsselten Spalten (bei Verwendung der deterministischen Verschlüsselung). Das Übergeben von Literalen oder T-SQL-Variablen, die verschlüsselten Spalten entsprechen, wird nicht unterstützt. Weitere Informationen zu einem von Ihnen verwendeten Clienttreiber finden Sie unter Entwickeln von Anwendungen mit Always Encrypted.

  • Sie müssen die Parametrisierung für Always Encrypted Variablen in Azure Data Studio oder SSMS verwenden, um Abfragen ausstellen zu können, die Werte übergeben, die verschlüsselten Spalten in diesen Tools entsprechen. Beispielsweise beim Einfügen von Daten in verschlüsselte Spalten oder beim Filtern nach verschlüsselten Spalten (bei Verwendung der deterministischen Verschlüsselung).

  • Tabellenwertparameter , die auf verschlüsselte Spalten abzielen, werden nicht unterstützt.

  • Abfragen mit den folgenden Klauseln werden nicht unterstützt:

  • Nachdem Sie die Definition einer verschlüsselten Spalte geändert haben, führen Sie sp_refresh_parameter_encryption aus, um die Always Encrypted Metadaten für das Objekt zu aktualisieren.

  • 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 ROWGUIDCOL-Eigenschaft .
    • Zeichenfolgenspalten (varchar, char usw.) mit anderen Sortierungen als binärcodepunktsortierungen (_BIN2) bei Verwendung der deterministischen Verschlüsselung.
    • Spalten, die Schlüssel für gruppierte und nicht gruppierte Indizes sind, wenn die randomisierte Verschlüsselung verwendet wird (Indizes für Spalten mit deterministischer Verschlüsselung werden unterstützt).
    • In Volltextindizes enthaltene Spalten (Always Encrypted die Volltextsuche nicht unterstützt).
    • Berechnete Spalten.
    • Spalten, auf die berechnete Spalten verweisen (wenn der Ausdruck nicht unterstützte Vorgänge für Always Encrypted ausführt)
    • Sparsespaltensatz.
    • Spalten, auf die von Statistiken bei verwendung der randomisierten Verschlüsselung verwiesen wird (deterministische Verschlüsselung wird unterstützt).
    • Partitionieren von Spalten.
    • Spalten mit Standardeinschränkungen.
    • Spalten, auf die durch eindeutige Einschränkungen verwiesen wird, wenn die randomisierte 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)
    • Verweisen auf Spalten in Fremdschlüsseleinschränkungen bei Verwendung der randomisierten Verschlüsselung oder bei Verwendung der deterministischen Verschlüsselung, wenn die referenzierten und verweisenden Spalten unterschiedliche Schlüssel oder Algorithmen verwenden.
    • Spalten, auf die durch Überprüfungseinschränkungen verwiesen wird.
    • Mithilfe der Änderungsdatenerfassung erfasste/nachverfolgte Spalten.
    • Primärschlüsselspalten in Tabellen mit Änderungsnachverfolgung.
    • Maskierte Spalten (mit dynamischer Datenmaskierung).
    • Spalten in Stretch-Datenbanktabellen. (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) veraltet. Dieses Feature wird in einer künftigen Version von Microsoft SQL Server 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:

Always Encrypted Transact-SQL-Referenz

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

Anweisungen

Systemkatalogsichten und gespeicherte Prozeduren

Informationen zu Verschlüsselungsmetadaten, die für jede Spalte gespeichert sind, finden Sie auch unter sys.columns (Transact-SQL ).

Datenbankberechtigungen

Es gibt vier Datenbankberechtigungen für Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY – Erforderlich zum Erstellen und Löschen von Spaltenhauptschlüsselmetadaten.

  • ALTER ANY COLUMN ENCRYPTION KEY – erforderlich, um Metadaten für Spaltenverschlüsselungsschlüssel zu erstellen und zu löschen.

  • VIEW ANY COLUMN MASTER KEY DEFINITION : Erforderlich, um auf die Metadaten des Spaltenhauptschlüssels zuzugreifen und sie zu lesen, die zum Abfragen verschlüsselter Spalten erforderlich sind.

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION : Erforderlich, um auf die Metadaten des Spaltenhauptschlüssels zuzugreifen und sie zu lesen, die zum Abfragen verschlüsselter Spalten erforderlich sind.

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 beim Auswählen verschlüsselter Spalten erforderlich, auch wenn der Benutzer nicht über die Berechtigung für die Spaltenhauptschlüssel (in seinen Schlüsselspeichern) verfügt, um die Spalten zu schützen und nicht auf Klartext zuzugreifen.

  • In SQL Server werden die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION standardmäßig der festen öffentlichen Datenbankrolle erteilt. Ein Datenbankadministrator kann die Berechtigungen für die öffentliche Rolle widerrufen (oder verweigern) und sie bestimmten Rollen oder Benutzern erteilen, um eingeschränkte Kontrolle zu implementieren.

  • In SQL-Datenbank werden die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION standardmäßig nicht der festen öffentlichen Datenbankrolle gewährt. Dadurch können bestimmte vorhandene Legacytools (mit älteren Versionen von DacFx) ordnungsgemäß funktionieren. Um mit verschlüsselten Spalten zu arbeiten (auch wenn sie nicht entschlüsselt werden), muss ein Datenbankadministrator daher explizit die Berechtigungen VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION erteilen.

Nächste Schritte

Weitere Informationen