Freigeben über


Massenladen von verschlüsselten Daten in Spalten mithilfe von Always Encrypted

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

Um verschlüsselte Daten zu laden, ohne während Massenkopievorgängen Metadatenprüfungen auf dem Server durchzuführen, erstellen Sie den Benutzer mit der ALLOW_ENCRYPTED_VALUE_MODIFICATIONS Option. Diese Option soll von älteren Tools oder Etl-Workflows (Extract-Transform-Load) von Drittanbietern verwendet werden, die always Encrypted nicht verwenden können. Dadurch kann der Benutzer verschlüsselte Daten sicher von einem Tabellensatz mit verschlüsselten Spalten zu einem anderen Tabellensatz mit verschlüsselten Spalten (innerhalb derselben oder zu einer anderen Datenbank) verschieben.

Die Option ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Sowohl CREATE USER als auch ALTER USER haben eine ALLOW_ENCRYPTED_VALUE_MODIFICATIONS Option. Wenn die Option auf ON festgelegt ist (Standardeinstellung OFF), unterdrückt sie kryptografische Metadatenüberprüfungen auf dem Server in Massenkopiervorgängen. Dadurch kann der Benutzer verschlüsselte Daten zwischen Tabellen oder Datenbanken massenweise kopieren, ohne die Daten zu entschlüsseln.

Szenarien zur Datenmigration

Die folgende Tabelle zeigt die empfohlenen Einstellungen für mehrere Migrationsszenarien.

Screenshot einer Tabelle mit den empfohlenen Einstellungen, die für mehrere Migrationsszenarien geeignet sind.

Massenladen verschlüsselter Daten

Verwenden Sie das folgende Verfahren, um verschlüsselte Daten zu laden.

  1. Legen Sie die Option ON für den Benutzer in der Datenbank fest, der das Ziel für den Massenkopievorgang ist. Zum Beispiel:

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. Führen Sie Ihre Massenkopieranwendung oder Ihr Massenkopiertool aus, indem Sie als dieser Benutzer eine Verbindung herstellen. (Wenn Ihre Anwendung einen Always Encrypted-fähigen Clienttreiber verwendet, stellen Sie sicher, dass die Verbindungszeichenfolge für die Datenquelle kein column encryption setting=enabled enthält, um sicherzustellen, dass die Daten, die aus verschlüsselten Spalten abgerufen werden, verschlüsselt bleiben. Weitere Informationen finden Sie unter Entwickeln von Anwendungen mit Always Encrypted.)

  3. Legen Sie die ALLOW_ENCRYPTED_VALUE_MODIFICATIONS Option wieder auf OFF. Zum Beispiel:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Potenzial für Datenbeschädigung

Die falsche Verwendung dieser Option kann zur Datenbeschädigung führen. Mit ALLOW_ENCRYPTED_VALUE_MODIFICATIONS der Option kann der Benutzer alle Daten in verschlüsselte Spalten in der Datenbank einfügen, einschließlich daten, die mit verschiedenen Schlüsseln verschlüsselt, falsch verschlüsselt oder gar nicht verschlüsselt sind. Falls der Benutzer versehentlich Daten kopiert, die nicht mithilfe des ordnungsgemäß für die Zielspalte eingerichteten Verschlüsselungsschemas (Spaltenverschlüsselungsschlüssel, Algorithmus, Verschlüsselungstyp) verschlüsselt sind, können die Daten nicht entschlüsselt werden (die Daten sind korrupt). Diese Option muss mit Vorsicht verwendet werden, da sie zur Datenbeschädigung in der Datenbank führen kann.

Das folgende Szenario zeigt, wie nicht ordnungsgemäß importierte Daten zur Datenbeschädigung führen können:

  1. Die Option ist auf ON für einen Benutzer festgelegt.

  2. Der Benutzer führt die Anwendung aus, die mit der Datenbank verbunden ist. Die Anwendung verwendet Massen-APIs zum Einfügen von Klartextwerten in verschlüsselte Spalten. Die Anwendung erwartet von einem durch Always Encrypted aktivierten Clienttreiber die Verschlüsselung der Daten beim Einfügen. Die Anwendung ist jedoch falsch konfiguriert, sodass sie entweder einen Treiber verwendet, der Always Encrypted nicht unterstützt oder die Verbindungszeichenfolge nicht enthält column encryption setting=enabled.

  3. Die Anwendung sendet Klartextwerte an den Server. Da kryptografische Metadatenüberprüfungen auf dem Server für den Benutzer deaktiviert sind, lässt der Server zu, dass falsche Daten (Klartext statt richtig verschlüsselter Chiffretext) in eine verschlüsselte Spalte eingefügt werden.

  4. Die gleiche oder eine andere Anwendung stellt eine Verbindung mit der Datenbank mithilfe eines Always Encrypted-enabled-Treibers und mit column encryption setting=enabled in der Verbindungszeichenfolge und ruft die Daten ab. Die Anwendung erwartet, dass die Daten transparent entschlüsselt werden. Der Treiber kann die Daten jedoch nicht entschlüsseln, da es sich dabei um falschen Chiffretext handelt.

Bewährte Vorgehensweise

Verwenden Sie vorgesehene Benutzerkonten für Workloads mit langer Ausführungszeit, die diese Option verwenden.

Für Anwendungen oder Tools, die für kurzzeitige Massenkopiervorgänge gedacht sind und verschlüsselte Daten ohne Entschlüsselung übertragen müssen, stellen Sie die Option ON direkt vor dem Start der Anwendung ein und setzen Sie sie direkt nach Abschluss des Vorgangs wieder auf OFF zurück.

Verwenden Sie diese Option nicht für die Entwicklung neuer Anwendungen. Verwenden Sie stattdessen einen Clienttreiber, der eine API zum Unterdrücken von kryptografischen Metadatenüberprüfungen für eine einzelne Sitzung bietet, z. B. die AllowEncryptedValueModifications Option in .NET Framework-Datenanbieter für SQL Server – siehe Kopieren verschlüsselter Daten mithilfe von SqlBulkCopy.