Immer verschlüsselt – Funktionsweise von Abfragen für verschlüsselte Spalten
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Zum Ausführen einer Abfrage für verschlüsselte Datenbankspalten fügen Sie Daten in diese Spalten ein, rufen Nur-Text-Werte ab oder führen unterstützte Vorgänge (z. B. Punktsuchvorgänge) mit deterministischer Verschlüsselung aus, muss der Benutzer oder die Anwendung, die die Abfrage ausgibt, die folgenden Voraussetzungen erfüllen:
- Sie benötigt Zugriff auf den Hauptschlüssel der Spalte, mit dem die Daten geschützt sind. Dieser Schlüsselzugriff ist zusätzlich zu Berechtigungen auf Datenbankebene erforderlich, z. B. SELECT in der relevanten Tabelle.
- Stellen Sie eine Verbindung mit der Datenbank her, und aktivieren Sie in der Datenbankverbindung Always Encrypted. 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 Chiffretext(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:
- 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, 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üsselungsschlüssels der verschlüsselten Spalte und des Speicherorts des entsprechenden Spaltenhauptschlüssels.
- Der Treiber ruft den Schlüsselspeicher mit den Spaltenhauptschlüsseln auf, um die Werte der Verschlüsselungsschlüssel der verschlüsselten Spalten zu entschlüsseln. Die resultierenden Klartext-Spaltenverschlüsselungsschlüssel werden zwischengespeichert, um die Anzahl der Roundtrips zum Schlüsselspeicher bei nachfolgenden Verwendungen desselben Spaltenverschlüsselungsschlüssels zu verringern.
- Der Treiber verwendet die erhaltenen Klartext-Spaltenverschlüsselungsschlüssel, um die Abfrageparameter zu verschlüsseln, die verschlüsselten Spalten entsprechen.
- 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.
- Die Datenbank-Engine führt die Abfrage aus. Dies kann Vergleiche auf Gleichheit für Spalten mit deterministischer Verschlüsselung umfassen.
- Wenn Abfrageergebnisse Daten aus verschlüsselten Spalten enthalten, fügt die Datenbank-Engine Verschlüsselungsmetadaten für jede Spalte an das Resultset an, einschließlich der Informationen zum Verschlüsselungsalgorithmus, dem Verschlüsselungstyp und den Schlüsselmetadaten.
- Die Datenbank-Engine sendet das Resultset an die Clientanwendung.
- Der Treiber versucht für jede verschlüsselte Spalte im empfangenen Resultset zunächst, den Klartext-Spaltenverschlüsselungsschlüssel im lokalen Cache zu finden, und führt dann nur einen Roundtrip zum Schlüsselspeicher mit dem Spaltenhauptschlüssel aus, wenn er den Schlüssel nicht im Cache finden kann.
- 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 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.
Unter Entwickeln von Anwendungen mithilfe von Always Encrypted finden Sie 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. Abfragespalten mit Always Encrypted with Azure Data Studio oder Abfragespalten mit Always Encrypted with SQL Server Management Studio.