Always Encrypted

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Diagram of Always Encrypted.

Always Encrypted ist ein Feature zum Schutz vertraulicher Daten, z. B. Kredit- Karte Zahlen oder nationale/regionale Identifikationsnummern (z. B. US-Sozialversicherungsnummern), die in Azure SQL-Datenbank, Azure SQL verwaltete Instanz und SQL Server-Datenbanken gespeichert sind. Always Encrypted ermöglicht Clients, vertrauliche Daten in Clientanwendungen zu verschlüsseln und die Verschlüsselungsschlüssel niemals für die Datenbank-Engine offenzulegen. Dies bietet eine Trennung zwischen denjenigen, die die Daten besitzen und diese anzeigen können, und denjenigen, die die Daten verwalten, aber keinen Zugriff haben sollten – lokale Datenbankadministratoren, Clouddatenbankoperatoren oder andere nicht autorisierte Benutzer mit hoher Berechtigung. Daher ermöglicht Always Encrypted Kunden, ihre vertraulichen Daten in der Cloud sicher zu speichern und die Wahrscheinlichkeit des Datendiebstahls durch böswillige Insider zu verringern.

Always Encrypted kann so konfiguriert werden, dass eingeschränkte vertrauliche Abfragen für verschlüsselte Daten unterstützt werden, die Abfragen, die Gleichheitsvergleiche umfassen. Zeigen Sie z. B. Nachschlagevorgänge oder Gleichheitsverknnungen an. Solche Abfragen nutzen deterministische Verschlüsselung.

Hinweis

Sichere Enklaven erweitern vertrauliche Computerfunktionen von Always Encrypted mit Musterabgleich, anderen 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 enthält eine Übersicht über das Einrichten von Always Encrypted. Ausführliche Informationen und erste Schritte finden Sie im Lernprogramm: Erste Schritte mit Always Encrypted.

Zum Einrichten von Always Encrypted in Ihrer Datenbank müssen Sie:

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

    • Spaltenverschlüsselungsschlüssel.
    • Spaltenmastertasten.

    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 Spaltenmasterschlü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 Spaltenmasterschlüssel verschlüsseln.

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

    • Die Metadaten des Spaltenmasterschlüssels erfassen den Speicherort des Spaltenmasterschlüssels.
    • Die Metadaten des Spaltenverschlüsselungsschlüssels enthalten den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels. Die Datenbank-Engine speichert oder verwendet niemals die Schlüssel eines typs in Nur-Text.

    Weitere Informationen zum Verwalten von Immer verschlüsselten Schlüsseln 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, einen Spaltenverschlüsselungsschlüssel zum Schutz der Daten in der Spalte und einen Verschlüsselungstyp an. Always Encrypted unterstützt zwei Verschlüsselungstypen:

    • Deterministische Verschlüsselung generiert immer denselben verschlüsselten Wert für einen bestimmten Nur-Text-Wert. 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 obigen Schritte mit SQL-Tools ausführen:

Um sicherzustellen, dass immer verschlüsselte Schlüssel und geschützte vertrauliche Daten niemals in Klartext in der Datenbankumgebung angezeigt werden, kann die Datenbank-Engine nicht an Schlüsselbereitstellungs- und Datenverschlüsselungsvorgängen oder Entschlüsselungsvorgängen beteiligt sein. Daher unterstützt Transact-SQL (T-SQL) keine Schlüsselbereitstellung oder kryptografische 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 (SQL-Tools können dies automatisieren).

Hinweis

Immer verschlüsselt mit sicheren Enklaven hebt einige der oben genannten Einschränkungen auf, indem kryptografische Vorgänge für vorhandene Daten mit T-SQL zugelassen werden, und es wird die Notwendigkeit beseitigt, die Daten außerhalb der Datenbank zu verschieben.

Funktionsweise von Abfragen für verschlüsselte Spalten

Wenn Sie eine Abfrage für verschlüsselte Datenbankspalten ausführen möchten, Fügen Sie Daten in verschlüsselte Spalten ein, rufen Sie Nur-Text-Werte aus verschlüsselten Spalten ab, oder führen Sie unterstützte Vorgänge (z. B. Punktsuchvorgänge) für Spalten mithilfe einer deterministischen Verschlüsselung aus, muss ein Benutzer oder eine Anwendung, die die Abfrage ausgibt, die folgende Voraussetzungen erfüllen:

  • Zugriff auf den Spaltenmasterschlüssel haben, der die Daten schützt. Der Schlüsselzugriff ist zusätzlich zu den Berechtigungen auf Datenbankebene erforderlich, z SELECT . B. in der Tabelle, die die Daten enthält.
  • Verbinden der Datenbank mit aktivierter "Always Encrypted" in der Datenbankverbindung. Die meisten SQL-Tools und SQL-Clienttreiber unterstützen die Aktivierung von Always Encrypted für Datenbankverbindungen.

Hinweis

Wenn der Benutzer Datenbankberechtigungen zum Lesen der Daten benötigt, aber keinen Zugriff auf die Schlüssel hat, 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 Aufrufen von sp_describe_parameter_encryption (Transact-SQL), um zu bestimmen, welche Parameter verschlüsselte Spalten als Ziel haben 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 schlüsselmetadaten, einschließlich des verschlüsselten Spaltenverschlüsselungsschlüssels und des Speicherorts des entsprechenden Spaltenmasterschlüssels.
  2. Der Treiber ruft den Schlüsselspeicher auf, der Spaltenmasterschlüssel enthält, um die verschlüsselten Spaltenverschlüsselungsschlüsselwerte zu entschlüsseln. Die resultierenden Verschlüsselungsschlüssel für Nur-Text-Spalten werden zwischengespeichert, um die Anzahl der Roundtrips zum Schlüsselspeicher bei nachfolgenden Verwendungen derselben Spaltenverschlüsselungsschlüssel zu reduzieren.
  3. Der Treiber verwendet die erhaltenen Verschlüsselungsschlüssel für Nur-Text-Spalten, um die Abfrageparameter zu verschlüsseln, die verschlüsselten Spalten entsprechen.
  4. Der Treiber ersetzt die Nur-Text-Werte der Parameter, die auf verschlüsselte Spalten mit ihren verschlüsselten Werten abzielen, und die Abfrage wird zur Verarbeitung an die Datenbank-Engine gesendet.
  5. Die Datenbank-Engine führt die Abfrage aus. Dies kann gleichheitsvergleiche für Spalten mit deterministischer Verschlüsselung umfassen.
  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 zum Verschlüsselungsalgorithmus, dem Verschlüsselungstyp und den Schlüsselmetadaten an das Resultset.
  7. Die Datenbank-Engine sendet das Resultset an die Clientanwendung.
  8. Für jede verschlüsselte Spalte im empfangenen Resultset versucht der Treiber zuerst, den Verschlüsselungsschlüssel für Nur-Text-Spalten im lokalen Cache zu finden, und macht nur einen Roundtrip zu einem Schlüsselspeicher, der den Spaltenmasterschlüssel enthält, wenn er den Schlüssel im Cache nicht finden kann.
  9. Der Treiber entschlüsselt die Ergebnisse und gibt Nur-Text-Werte 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 allgemeine Arten 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.

Informationen zum Entwickeln von Anwendungen mit Always Encrypted für die Liste der Clienttreiber, die Always Encrypted unterstützen, sowie Informationen zum Entwickeln von Anwendungen, die verschlüsselte Spalten abfragen.

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

Begrenzungen

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

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

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

    Hinweis

    Always Encrypted with secure enclaves relaxes the above restriction by allowing pattern matching, comparison operators, sorting, and indexing on columns using randomized encryption.

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

    • Vergleichen einer verschlüsselten Spalte mit einer Nur-Text-Spalte oder einem Literal.
    • Kopieren von Daten aus einer Nur-Text-Spalte 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 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 Abfrageparameter verwenden, um Werte zu übergeben, die verschlüsselten Spalten entsprechen. Wenn Sie z. B. Daten in verschlüsselte Spalten einfügen oder nach verschlüsselten Spalten filtern (bei verwendung deterministischer Verschlüsselung). Das Übergeben von Literalen oder T-SQL-Variablen, die verschlüsselten Spalten entsprechen, wird nicht unterstützt. Weitere Informationen, die für einen verwendeten Clienttreiber spezifisch sind, finden Sie unter Entwickeln von Anwendungen mit Always Encrypted.

  • Sie müssen die Parameterisierung für Always Encrypted-Variablen in Azure Data Studio oder SSMS verwenden, um Abfragen ausstellen, die Werte übergeben, die verschlüsselten Spalten in diesen Tools entsprechen. Wenn Sie z. B. Daten in verschlüsselte Spalten einfügen oder nach verschlüsselten Spalten filtern (bei verwendung deterministischer Verschlüsselung).

  • Tabellenwertparameter für verschlüsselte Spalten werden nicht unterstützt.

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

  • Führen Sie nach dem Ändern der Definition einer verschlüsselten Spalte 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, Zeitstempel, Zeilenversion, Bild, ntext, Text, sql_variant, Hierarchie-ID, Geografie, Geometrie, Alias, benutzerdefinierte Typen.
    • FILESTREAM-Spalten
    • Spalten mit der IDENTITY-Eigenschaft .
    • Columns with ROWGUIDCOL property.
    • Zeichenfolgenspalten (varchar, char usw.) mit anderen Sortierungen als binärem Codepunkt (_BIN2) bei Verwendung der deterministischen Verschlüsselung.
    • Spalten, die Schlüssel für gruppierte und nicht gruppierte Indizes sind, wenn zufällige Verschlüsselung verwendet wird (Indizes für Spalten mit deterministischer Verschlüsselung werden unterstützt).
    • Spalten, die in Volltextindizes enthalten sind (Always Encrypted unterstützt keine Volltextsuche).
    • Berechnete Spalten.
    • Spalten, auf die berechnete Spalten verweisen (wenn der Ausdruck nicht unterstützte Vorgänge für Always Encrypted ausführt)
    • Spaltensatz mit geringem Einsparen.
    • Spalten, auf die bei Verwendung der zufälligen 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 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)
    • Verweisen auf Spalten in Fremdschlüsseleinschränkungen bei Verwendung einer zufälligen Verschlüsselung oder bei Verwendung deterministischer Verschlüsselung, wenn die referenzierten und verweisenden Spalten unterschiedliche Schlüssel oder Algorithmen verwenden.
    • Spalten, auf die durch Prüfeinschränkungen verwiesen wird.
    • Erfasste/nachverfolgte Spalten mithilfe der Änderungsdatenerfassung.
    • Primärschlüsselspalten in Tabellen mit Änderungsnachverfolgung.
    • Spalten, die maskiert sind (mithilfe der dynamischen Datenformatierung).
    • Spalten in Gestreckten Datenbanktabellen. (Tabellen mit Spalten, die mit Always Encrypted verschlüsselt sind, können für Stretch aktiviert werden.)

    Wichtig

    Stretch-Datenbank ist in SQL Server 2022 (16.x) und Azure SQL-Datenbank veraltet. Dieses Feature wird in einer zukünftigen Version des 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:

Always Encrypted Transact-SQL-Referenz

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

Anweisungen

Systemkatalogansichten 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 Spaltenmasterschlüsselmetadaten.

  • ALTER ANY COLUMN ENCRYPTION KEY – erforderlich zum Erstellen und Löschen von Spaltenverschlüsselungsschlüsselmetadaten.

  • VIEW ANY COLUMN MASTER KEY DEFINITION - erforderlich, um auf die Metadaten des Spaltenmasterschlü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 Spaltenmasterschlü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 ÄNDERN EINES BELIEBIGEN SPALTENMASTERSCHLÜSSELS ÄNDERN EINES BELIEBIGEN SPALTENVERSCHLÜSSELUNGSSCHLÜSSELS ANZEIGEN EINER BELIEBIGEN SPALTENMASTERSCHLÜSSELDEFINITION ANZEIGEN EINER BELIEBIGEN SPALTENVERSCHLÜSSELUNGSSCHLÜSSELDEFINITION
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 "ANY COLUMN ENCRYPTION KEY DEFINITION " sind erforderlich, wenn verschlüsselte Spalten ausgewählt werden, auch wenn der Benutzer nicht über die Berechtigung für die Spaltenmasterschlüssel (in seinen Schlüsselspeichern) verfügt, um die Spalten zu schützen und nicht auf den Nur-Text-Versuch zuzugreifen.

  • In SQL Server werden sowohl DIE BERECHTIGUNG "ANY COLUMN MASTER KEY DEFINITION" als auch "ANY COLUMN ENCRYPTION KEY DEFINITION" standardmäßig der öffentlichen Festen Datenbankrolle gewährt. Ein Datenbankadministrator kann die Berechtigungen für die öffentliche Rolle widerrufen (oder verweigern) und sie bestimmten Rollen oder Benutzern gewähren, um eine eingeschränkte Kontrolle zu implementieren.

  • In SQL-Datenbank werden die BERECHTIGUNGEN VIEW ANY COLUMN MASTER KEY DEFINITION und VIEW ANY COLUMN ENCRYPTION KEY DEFINITION nicht standardmäßig der öffentlichen Rolle für feste Datenbanken erteilt. Dadurch können bestimmte ältere Tools (mit älteren Versionen von DacFx) ordnungsgemäß funktionieren. Folglich muss ein Datenbankadministrator explizit die BERECHTIGUNG "VIEW ANY COLUMN MASTER KEY DEFINITION " und "VIEW ANY COLUMN ENCRYPTION KEY DEFINITION " erteilen, um mit verschlüsselten Spalten (auch wenn sie nicht entschlüsselt werden) zu arbeiten.

Nächste Schritte

Siehe auch