Always EncryptedAlways Encrypted

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Always EncryptedAlways Encrypted

Always Encrypted ist eine Funktion zum Schutz sensibler Daten, wie Kreditkartennummern oder Personalausweisnummern (z.B. US-Sozialversicherungsnummern), die in Azure SQL-DatenbankAzure SQL Database- oder SQL ServerSQL Server -Datenbanken gespeichert sind.Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (for example, U.S. social security numbers), stored in Azure SQL-DatenbankAzure SQL Database or SQL ServerSQL Server databases. Always Encrypted ermöglicht es Clients, sensible Daten in Clientanwendungen zu verschlüsseln und die Verschlüsselungsschlüssel niemals an Datenbank-EngineDatabase Engine (SQL-DatenbankSQL Database oder SQL ServerSQL Server) weiterzugeben.Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Datenbank-EngineDatabase Engine (SQL-DatenbankSQL Database or SQL ServerSQL Server). Daher bietet Always Encrypted eine Trennung zwischen denjenigen, die die Daten besitzen und sie ansehen können, und denjenigen, die die Daten verwalten, aber keinen Zugriff haben sollten.As a result, Always Encrypted provides a separation between those who own the data and can view it, and those who manage the data but should have no access. Always Encrypted stellt sicher, dass Administratoren lokaler Datenbanken, Clouddatenbank-Operatoren oder andere nicht autorisierte Benutzer mit umfangreichen Rechten nicht auf die verschlüsselten Daten zugreifen können. So können Kunden ihre vertraulichen Daten ruhigen Gewissens außerhalb ihres direkten Kontrollbereichs speichern.By ensuring on-premises database administrators, cloud database operators, or other high-privileged unauthorized users, can't access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. Dies ermöglicht Organisationen, Daten in Azure zu speichern. Daraufhin können die lokale Datenbankverwaltung an Drittanbieter delegiert oder die Anforderungen an die Sicherheitsfreigaben der eigenen Datenbankadministrationsmitarbeiter reduziert werden.This allows organizations to store their data in Azure, and enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

Always Encrypted bietet Funktionen für vertrauliches Computing, indem es dem Datenbank-EngineDatabase Engine ermöglicht, einige Abfragen zu verschlüsselten Daten zu verarbeiten, während die Vertraulichkeit der Daten gewährleistet ist und die oben genannten Sicherheitsmaßnahmen umgesetzt werden.Always Encrypted provides confidential computing capabilities by enabling the Datenbank-EngineDatabase Engine to process some queries on encrypted data, while preserving the confidentiality of the data and providing the above security benefits. In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) und Azure SQL-DatenbankAzure SQL Database unterstützt Always Encrypted einen Gleichstellungsabgleich durch deterministische Verschlüsselung.In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in Azure SQL-DatenbankAzure SQL Database, Always Encrypted supports equality comparison via deterministic encryption. Weitere Informationen finden Sie unter Auswählen der deterministischen oder zufälligen Verschlüsselung.See Selecting Deterministic or Randomized Encryption.

Hinweis

In SQL Server 2019 (15.x)SQL Server 2019 (15.x) ermöglicht Secure Enclaves eine erhebliche Erweiterung des vertraulichen Computings von Always Encrypted mit Musterabgleich, anderen Vergleichsoperatoren und direkter Verschlüsselung.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), secure enclaves substantially extend confidential computing capabilities of Always Encrypted with pattern matching, other comparison operators and in-place encryption. Weitere Informationen finden Sie unter Always Encrypted mit Secure Enclaves.See Always Encrypted with secure enclaves.

Always Encrypted macht die Verschlüsselung den Anwendungen gegenüber transparent.Always Encrypted makes encryption transparent to applications. 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.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. Der Treiber verschlüsselt die Daten in vertraulichen Spalten, bevor er sie an Datenbank-EngineDatabase Engineweitergibt, und schreibt Abfragen automatisch neu, sodass die Semantik der Anwendung beibehalten wird.The driver encrypts the data in sensitive columns before passing the data to the Datenbank-EngineDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. Auf ähnliche Weise entschlüsselt der Treiber transparent Daten, die in verschlüsselten Datenbankspalten in Abfrageergebnissen gespeichert sind.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted ist in allen Editionen von Azure SQL-DatenbankAzure SQL Database verfügbar, beginnend mit SQL Server 2016 (13.x)SQL Server 2016 (13.x) und allen Dienstebenen von SQL-DatenbankSQL Database.Always Encrypted is available in all editions of Azure SQL-DatenbankAzure SQL Database, starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and all service tiers of SQL-DatenbankSQL Database. (Vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 war Always Encrypted auf die Enterprise Edition beschränkt.) Eine Channel 9-Präsentation zu Always Encrypted finden Sie unter Keeping Sensitive Data Secure with Always Encrypted.(Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

Typische SzenarienTypical Scenarios

Lokaler Client und lokale DatenClient and data on-premises

Ein Kunde verfügt über eine Clientanwendung und SQL ServerSQL Server , die beide lokal, an ihrem Unternehmensstandort ausgeführt werden.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. Der Kunde möchte einen externen Anbieter einstellen, um SQL ServerSQL Serverzu verwalten.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Um die sensiblen, in SQL ServerSQL Servergespeicherten Daten zu schützen, verwendet der Kunde Always Encrypted, um die Trennung der Pflichten von Datenbankadministratoren und Anwendungsadministratoren sicherzustellen.In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. Der Kunde speichert Klartextwerte von Always Encrypted-Schlüsseln in einem vertrauenswürdigen Schlüsselspeicher, auf den die Clientanwendung zugreifen kann.The customer stores plaintext values of Always Encrypted keys in a trusted key store, which the client application can access. SQL ServerSQL Server -Administratoren haben keinen Zugriff auf die Schlüssel und sind daher nicht in der Lage, die in SQL ServerSQL Servergespeicherten sensiblen Daten zu entschlüsseln.administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Lokaler Client mit Daten in AzureClient on-premises with data in Azure

Ein Kunde verfügt über eine lokale Clientanwendung an seinem Unternehmensstandort.A customer has an on-premises client application at their business location. Die Anwendung arbeitet mit sensiblen Daten, die in einer von Azure gehosteten Datenbank gespeichert sind (SQL-DatenbankSQL Database oder SQL ServerSQL Server auf einem virtuellen Computer in Microsoft Azure ausgeführt).The application operates on sensitive data stored in a database hosted in Azure (SQL-DatenbankSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). Der Kunde verwendet Always Encrypted und speichert Always Encrypted-Schlüssel in einem vertrauenswürdigen, lokal gehosteten Schlüsselspeicher, damit MicrosoftMicrosoft -Cloudadministratoren keinen Zugriff auf sensible Daten haben.The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

Client und Daten in AzureClient and Data in Azure

Ein Kunde hat eine Clientanwendung, die in Microsoft Azure (z.B. in einer Worker- oder einer Webrolle) gehostet wird. Sie operiert mit sensiblen Daten, die auch in Microsoft Azure gespeichert sind (SQL-Datenbank oder SQL Server werden auf einem virtuellen Computer in Microsoft Azure ausgeführt).A customer has a client application, hosted in Microsoft Azure (for example, in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Obwohl Always Encrypted keine vollständige Isolation der Daten von Cloudadministratoren bietet, da sowohl die Daten als auch die Schlüssel den Cloudadministratoren der Plattform, die die Clientebene hostet, verfügbar gemacht werden, profitiert der Kunde dennoch von der kleineren Angriffsfläche für Sicherheitsangriffe (die Daten werden in der Datenbank immer verschlüsselt).Although Always Encrypted doesn't provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

FunktionsweiseHow it Works

Sie können Always Encrypted für individuelle Datenbankspalten konfigurieren, die Ihre sensiblen Daten enthalten.You can configure Always Encrypted for individual database columns containing your sensitive data. Beim Einrichten der Verschlüsselung für eine Spalte geben Sie die Informationen über den Verschlüsselungsalgorithmus an sowie kryptografische Schlüssel für den Schutz der Daten in der Spalte.When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. Always Encrypted verwendet zwei Schlüsseltypen: Spaltenverschlüsselungsschlüssel und Spaltenhauptschlüssel.Always Encrypted uses two types of keys: column encryption keys and column master keys. Ein Spaltenverschlüsselungsschlüssel wird verwendet, um Daten in einer verschlüsselten Spalte zu verschlüsseln.A column encryption key is used to encrypt data in an encrypted column. Ein Spaltenhauptschlüssel ist ein Schlüssel zum Schutz von Schlüsseln, der einen oder mehrere Spaltenverschlüsselungsschlüssel verschlüsselt.A column master key is a key-protecting key that encrypts one or more column encryption keys.

Die Datenbank-Engine speichert die Verschlüsselungskonfiguration für jede Spalte in den Datenbankmetadaten.The Database Engine stores encryption configuration for each column in database metadata. Beachten Sie, dass die Datenbank-Engine jedoch nie Schlüssel jedes Typs als Klartext speichert.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Es speichert nur verschlüsselte Werte von Spaltenverschlüsselungsschlüsseln sowie die Information über den Speicherort der Spaltenhauptschlüssel, die in externen vertrauenswürdigen Schlüsselspeichern gespeichert werden, z.B. in Azure Key Vault, im Windows-Zertifikatspeicher, auf einem Clientcomputer oder einem Hardwaresicherheitsmodul.It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

Eine Anwendung muss einen Always Encrypted-fähigen Clienttreiber verwenden, um auf Daten zuzugreifen, die in einer verschlüsselten Spalte als Klartext gespeichert sind.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Wenn eine Anwendung eine parametrisierte Abfrage ausgibt, arbeitet der Treiber transparent mit der Datenbank-Engine zusammen, um zu ermitteln, welche Parameter verschlüsselte Spalten anvisieren und deshalb verschlüsselt werden müssen.When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. Für jeden Parameter, der verschlüsselt werden muss, ruft der Treiber die Informationen über den Verschlüsselungsalgorithmus und den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels für die Spalte, die Parameterziele sowie den Speicherort des entsprechenden Spaltenhauptschlüssels ab.For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

Als nächstes kontaktiert der Treiber den Schlüsselspeicher, der den Spaltenhauptschlüssel enthält, um den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels zu entschlüsseln und anschließend verwendet er den Klartext-Verschlüsselungsschlüssel zum Entschlüsseln der Parameter.Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. Der sich ergebende Klartext-Spaltenverschlüsselungsschlüssel wird zwischengespeichert, um die Anzahl der Roundtrips zum Schlüsselspeicher für die nachfolgende Verwendung des gleichen Spaltenverschlüsselungsschlüssels zu verringern.The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. Der Treiber ersetzt die Klartextwerte der Parameter, die verschlüsselte Spalten mit den verschlüsselten Werten anvisieren und übermittelt die Abfrage an den Server zur Verarbeitung.The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

Der Server berechnet das Resultset, und für jede verschlüsselte Spalte im Resultset fügt der Treiber die Verschlüsselungsmetadaten für die Spalte an, einschließlich der Informationen zum Verschlüsselungsalgorithmus und zu den entsprechenden Schlüsseln.The server computes the result set, and for any encrypted columns included in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. Der Treiber versucht zuerst, den Klartext-Verschlüsselungsschlüssel im lokalen Cache zu finden und fragt nur dann den Spaltenhauptschlüssel ab, wenn er den Schlüssel nicht im Cache finden kann.The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key if it can't find the key in the cache. Als Nächstes entschlüsselt der Treiber die Ergebnisse und übermittelt Klartextwerte an die Anwendung.Next, the driver decrypts the results and returns plaintext values to the application.

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.A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. Anbieter der gängigen Schlüsselspeicherarten sind in clientseitigen Treiberbibliotheken von Microsoft oder als eigenständige Downloads verfügbar.Providers for common types of key stores are available in client-side driver libraries from Microsoft or as standalone downloads. Sie können auch einen eigenen Anbieter implementieren.You can also implement your own provider. Die Funktionen von Always Encrypted, einschließlich integrierte Speicheranbieter für Spaltenhauptschlüssel, variieren je nach Treiberbibliothek und deren Version.Always Encrypted capabilities, including built-in column master key store providers vary by a driver library and its version.

Weitere Informationen zur Entwicklung von Anwendungen mit Always Encrypted mit bestimmten Clienttreibern finden Sie unter Always Encrypted (Cliententwicklung).For details of how to develop applications using Always Encrypted with particular client drivers, see Develop applications using Always Encrypted.

RemarksRemarks

Die Entschlüsselung findet über den Client statt.Decryption occurs via the client. Das bedeutet, dass einige Aktionen, die nur serverseitig auftreten, nicht ausgeführt werden können, wenn Always Encrypted verwendet wird.This means that some actions that occur only server-side won't work when using Always Encrypted.

Hier sehen Sie ein Beispiel eines Updates, das versucht, Daten von einer verschlüsselten Spalte in eine nicht verschlüsselte Spalte ohne die Rückgabe eines Resultsets an den Client zu verschieben:Here's an example of an update that attempts to move data from an encrypted column to an unencrypted column without returning a result set to the client:

update dbo.Patients set testssn = SSN

Wenn die US-Sozialversicherungsnummer (SSN) eine Spalte darstellt, die über Always Encrypted verschlüsselt wird, schlägt die oben dargestellte Updateanweisung mit einem Fehler wie dem folgenden fehl:If SSN is a column encrypted using Always Encrypted, the above update statement will fail with an error similar to:

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

Führen Sie folgende Schritte durch, um die Spalte erfolgreich zu aktualisieren:To successfully update the column, do the following:

  1. Wählen Sie über die Anweisung SELECT die Datei aus der SSN-Spalte aus, und speichern Sie diese in einem Resultset in der Anwendung.SELECT the data out of the SSN column, and store it as a result set in the application. Dadurch kann die Anwendung (Clienttreiber) die Spalte entschlüsseln.This will allow for the application (client driver) to decrypt the column.
  2. Fügen Sie über INSERT die Daten aus dem Resultset in SQL Server ein.INSERT the data from the result set into SQL Server.

Wichtig

In diesem Szenario werden die Daten entschlüsselt, sobald sie zurück an den Server gesendet werden, da die Zielspalte einen regulären Varchar-Typ darstellt, der verschlüsselte Daten nicht akzeptiert.In this scenario, the data will be unencrypted when sent back to the server because the destination column is a regular varchar that does not accept encrypted data.

Auswählen der deterministischen oder zufälligen VerschlüsselungSelecting Deterministic or Randomized Encryption

Die Datenbank-Engine wird nie auf Grundlage von Klartextdaten ausgeführt, die in verschlüsselten Spalten gespeichert sind, doch es unterstützt einige Abfragen für verschlüsselte Daten je nach Verschlüsselungstyp für die Spalte.The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. Always Encrypted unterstützt zwei Arten von Verschlüsselung: die zufällige und die deterministische Verschlüsselung.Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • Die deterministische Verschlüsselung generiert immer denselben verschlüsselten Wert für jeden angegebenen Klartextwert.Deterministic encryption always generates the same encrypted value for any given plain text value. Die deterministische Verschlüsselung ermöglicht die Punktsuche, Gleichheitsverknüpfung, Gruppierung und Indizierung in verschlüsselten Spalten.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. 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.However, it may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there's a small set of possible encrypted values, such as True/False, or North/South/East/West region. Die deterministische Verschlüsselung muss eine Spaltensortierung mit einer binary2-Sortierreihenfolge für Zeichenspalten verwenden.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • Die zufällige Verschlüsselung verwendet eine Methode, die Daten in einer weniger vorhersagbaren Weise verschlüsselt.Randomized encryption uses a method that encrypts data in a less predictable manner. Die zufällige Verschlüsselung ist sicherer, verhindert aber die Suche, Gruppierung, Indizierung und Verknüpfung für verschlüsselte Spalten.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Verwenden Sie die deterministische Verschlüsselung für Spalten, die als Such- oder Gruppierungsparameter verwendet werden,Use deterministic encryption for columns that will be used as search or grouping parameters. wie z. B. eine Personalausweisnummer.For example, a government ID number. 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.Use randomized encryption for data such as confidential investigation comments, which aren't grouped with other records and aren't used to join tables. Informationen zu kryptografischen Algorithmen von Always Encrypted finden Sie unter Always Encrypted-Kryptografie.For details on Always Encrypted cryptographic algorithms, see Always Encrypted cryptography.

Konfigurieren von Always EncryptedConfiguring Always Encrypted

Die Erstinstallation von Always Encrypted in einer Datenbank umfasst die Generierung von Always Encrypted-Schlüsseln, das Erstellen von Schlüsselmetadaten, die Konfigurierung von Verschlüsselungseigenschaften von ausgewählten Datenbankspalten, und/oder das Verschlüsseln von Daten, die möglicherweise bereits in Spalten vorhanden sind, die verschlüsselt werden müssen.The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. Bitte beachten Sie, dass einige dieser Aufgaben nicht in Transact-SQL unterstützt werden und die Verwendung von clientseitigen Tools erfordern.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Da Always Encrypted-Schlüssel und geschützte sensible Daten nie dem Server in Klartext offengelegt werden, kann die Datenbank-Engine nicht an der Schlüsselbereitstellung oder der Ausführung von Vorgängen zur Datenverschlüsselung oder -entschlüsselung beteiligt werden.As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine can't be involved in key provisioning and perform data encryption or decryption operations. Sie können SQL Server Management Studio oder PowerShell verwenden, um solche Aufgaben auszuführen.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

TaskTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Bereitstellung von Spaltenhauptschlüsseln, Spaltenverschlüsselungsschlüsseln und Verschlüsselungsschlüsseln für verschlüsselte Spalten mit dem entsprechenden SpaltenhauptschlüsselProvisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. JaYes JaYes NeinNo
Erstellen von Schlüsselmetadaten in der DatenbankCreating key metadata in the database. JaYes JaYes JaYes
Erstellen neuer Tabellen mit verschlüsselten SpaltenCreating new tables with encrypted columns JaYes JaYes JaYes
Verschlüsseln von vorhandenen Daten in ausgewählten DatenbankspaltenEncrypting existing data in selected database columns JaYes JaYes NeinNo

Hinweis

Always Encrypted mit Secure Enclaves, eingeführt in SQL Server 2019 (15.x)SQL Server 2019 (15.x), unterstützt die Verschlüsselung vorhandener Daten mit Transact-SQL.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), does support encrypting existing data using Trasact-SQL. Außerdem entfällt die Notwendigkeit, die Daten für kryptografische Vorgänge außerhalb der Daten zu verschieben.It also eliminates the need to move the data outside of the data for cryptographic operations.

Hinweis

Stellen Sie sicher, dass Sie Schlüsselbereitstellungs- oder Datenverschlüsselungstools in einer sicheren Umgebung auf einem Computer ausführen, auf dem nicht Ihre Datenbank gehostet wird.Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. Andernfalls könnten vertrauliche Daten oder die Schlüssel in der Serverumgebung zugänglich werden, was die Vorteile der Verwendung von Always Encrypted verringern würde.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Weitere Informationen zum Konfigurieren von Always Encrypted finden Sie unter:For details on configuring Always Encrypted see:

Erste Schritte mit Always EncryptedGetting Started with Always Encrypted

Verwenden Sie den Always Encrypted-Assistenten , um schnell in Always Encrypted einzusteigen.Use the Always Encrypted Wizard to quickly start using Always Encrypted. Der Assistent stellt die benötigten Schlüssel bereit und konfiguriert die Verschlüsselung für ausgewählte Spalten.The wizard will provision the required keys and configure encryption for selected columns. Wenn die Spalten, für die Sie die Verschlüsselung festlegen, schon Daten enthalten, verschlüsselt der Assistent die Daten.If the columns you're setting encryption for already contain some data, the wizard will encrypt the data. Im folgenden Beispiel wird veranschaulicht, wie eine Spalte verschlüsselt wird.The following example demonstrates the process for encrypting a column.

Hinweis

Ein Video, das die Verwendung des Assistenten erläutert, finden Sie unter Getting Started with Always Encrypted with SSMS(Video in englischer Sprache).For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Stellen Sie eine Verbindung zu einer vorhandenen Datenbank her, die Tabellen mit Spalten enthält, die Sie mithilfe des Objekt-Explorers oder Management Studio verschlüsseln möchten, oder erstellen Sie eine neue Datenbank und anschließend eine Tabelle oder mehrere Tabellen mit Spalten, die verschlüsselt werden müssen, und stellen Sie eine Verbindung dazu her.Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, zeigen Sie auf Aufgaben, und klicken Sie auf Spalten verschlüsseln, um den Assistenten für Always Encrypted zu öffnen.Right-click your database, point to Tasks, and then click Encrypt Columns to open the Always Encrypted Wizard.
  3. Lesen Sie die Seite Einführung , und klicken Sie dann auf Weiter.Review the Introduction page, and then click Next.
  4. Erweitern Sie die Tabellen auf der Spaltenauswahl -Seite, und wählen Sie die Spalten aus, die Sie verschlüsseln möchten.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. Legen Sie für jede zu verschlüsselnde Spalte den Verschlüsselungstyp fest: entweder deterministisch oder zufällig.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Wählen Sie für jede zu verschlüsselnde Spalte einen Verschlüsselungsschlüsselaus.For each column selected for encryption, select an Encryption Key. Falls Sie noch keinen Verschlüsselungsschlüssel für diese Datenbank erstellt haben, wählen Sie die Standardoption (neuer, automatisch generierter Schlüssel) aus, und klicken Sie anschließend auf Weiter.If you have not previously created any encryption keys for this database, select the default choice of a new autogenerated key, and then click Next.
  7. Wählen Sie auf der Seite Konfiguration des Hauptschlüssels einen Speicherort für den neuen Schlüssel aus, wählen Sie eine Hauptschlüsselquelle aus, und klicken Sie anschließend auf Weiter.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next.
  8. Wählen Sie auf der Seite Überprüfung aus, ob das Skript sofort ausgeführt oder ob ein PowerShell-Skript erstellt werden soll, und klicken Sie dann auf Weiter.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. Überprüfen Sie die ausgewählten Optionen auf der Seite Zusammenfassung, und klicken Sie dann auf Fertig stellen.On the Summary page, review the options you've selected, and then click Finish. Schließen Sie den Assistenten nach Abschluss.Close the wizard when completed.

Details zur FunktionFeature Details

  • Abfragen können in deterministisch verschlüsselten Spalten Gleichheitsvergleiche durchführen. Andere Vorgänge (z.B. „größer/kleiner als“, Mustervergleiche mittels LIKE-Operator oder arithmetische Operationen) können nicht durchgeführt werden.Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (for example, greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • Abfragen zu Spalten, die mithilfe der zufälligen Verschlüsselung verschlüsselt wurden, können für keine dieser Spalten Vorgänge durchführen.Queries on columns encrypted by using randomized encryption can't perform operations on any of those columns. Das Indizieren von zufällig verschlüsselten Spalten wird nicht unterstützt.Indexing columns encrypted using randomized encryption isn't supported.

Hinweis

Always Encrypted mit Secure Enclaves, eingeführt in SQL Server 2019 (15.x)SQL Server 2019 (15.x), behebt die obige Einschränkung, indem ein Musterabgleich, Vergleichsoperatoren und Indexierung für Spalten mit zufälliger Verschlüsselung ermöglicht werden.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), addresses the above limitation by enabling pattern matching, comparison operators and indexing on columns using randomized encryption.

  • Ein Spaltenverschlüsselungsschlüssel kann bis zu zwei verschiedene verschlüsselte Werte aufweisen. Diese sind jeweils mit einem anderen Spaltenhauptschlüssel verschlüsselt.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Dies erleichtert die Rotation der Spaltenhauptschlüssel.This facilitates column master key rotation.

  • Die deterministische Verschlüsselung erfordert eine der binary2 - Sortierungenin der Spalte.Deterministic encryption requires a column to have one of the binary2 collations.

  • Führen Sie nach der Änderung der Definition sp_refresh_parameter_encryption aus, um die Always Encrypted-Metadaten für das Objekt zu aktualisieren.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted wird für die Spalten mit den folgenden Merkmalen nicht unterstützt.Always Encrypted isn't supported for the columns with the below characteristics. Wenn beispielsweise eine der folgenden Bedingungen auf die Spalte zutrifft, kann die ENCRYPTED WITH-Klausel in CREATE TABLE/ALTER TABLE für eine Spalte nicht verwendet werden:For example, if any of the following conditions apply to the column, the ENCRYPTED WITH clause can't be used in CREATE TABLE/ALTER TABLE for a column:

  • Spalten, die einen der folgenden Datentypen verwenden: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, Alias, benutzerdefinierte TypenColumns using one of the following data types: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • FILESTREAM-SpaltenFILESTREAM columns
  • Spalten mit der IDENTITY-EigenschaftColumns with the IDENTITY property.
  • Spalten mit der ROWGUIDCOL-EigenschaftColumns with ROWGUIDCOL property.
  • Zeichenfolgenspalten (varchar, char usw.) mit Nicht-BIN2-SortierungenString (varchar, char, etc.) columns with non-bin2 collations.
  • Spalten, die Schlüssel für nicht gruppierte Indizes darstellen, die wiederum eine zufallsverschlüsselte Spalte als Schlüsselspalte verwenden (bei deterministisch verschlüsselten Spalten gibt es keine Probleme)Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Spalten, die Schlüssel für gruppierte Indizes darstellen, die wiederum eine zufallsverschlüsselte Spalte als Schlüsselspalte verwenden (bei deterministisch verschlüsselten Spalten gibt es keine Probleme)Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Spalten, die Schlüssel für die Volltextindizes darstellen, die wiederum sowohl zufallsverschlüsstelte als auch deterministisch verschlüsselte Spalten umfassen.Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic.
  • Berechnete Spalten.Computed columns.
  • Spalten, auf die berechnete Spalten verweisen (wenn der Ausdruck nicht unterstützte Vorgänge für Always Encrypted ausführt)Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted).
  • SparsespaltenSparse column set.
  • Spalten, auf die von Statistiken aus verwiesen wirdColumns that are referenced by statistics.
  • Spalten, die den Aliastyp verwendenColumns using alias type.
  • PartitionierungsspaltenPartitioning columns.
  • Spalten mit standardmäßigen EinschränkungenColumns with default constraints.
  • Spalten, auf die Unique-Einschränkungen verweisen, wenn die zufällige Verschlüsselung verwendet wird (deterministische Verschlüsselung wird unterstützt)Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported).
  • Primärschlüsselspalten, wenn die zufällige Verschlüsselung verwendet wird (deterministische Verschlüsselung wird unterstützt)Primary key columns when using randomized encryption (deterministic encryption is supported).
  • 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 verwendenReferencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms.
  • Spalten, auf die Check-Einschränkungen verweisenColumns referenced by check constraints.
  • Spalten in Tabellen, die Change Data Capture verwendenColumns in tables that use change data capture.
  • Primärschlüsselspalten in Tabellen mit ÄnderungsnachverfolgungPrimary key columns on tables that have change tracking.
  • Spalten, die maskiert werden (mithilfe der dynamischen Datenmaskierung)Columns that are masked (using Dynamic Data Masking).
  • Spalten in Stretch-aktivierten TabellenColumns in Stretch Database tables. (Tabellen mit Spalten, die mit Always Encrypted verschlüsselt sind, können für Stretch aktiviert werden.)(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • Spalten in externen (PolyBase)-Tabellen (Hinweis: Die Verwendung von externen Tabellen und Tabellen mit verschlüsselten Spalten in der gleichen Abfrage wird unterstützt)Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported).
  • Tabellenwertparameter, die auf verschlüsselte Spalten ausgerichtet sind, werden nicht unterstütztTable-valued parameters targeting encrypted columns aren't supported.

Die folgenden Klauseln dürfen in verschlüsselten Spalten nicht verwendet werden:The following clauses can't be used for encrypted columns:

  • FOR XML
  • FOR JSON PATH

Die folgenden Funktionen funktionieren nicht bei verschlüsselten Spalten:The following features don't work on encrypted columns:

  • Transaktions- oder MergereplikationTransactional or merge replication
  • Verteilte Abfragen (Verbindungsserver, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))Distributed queries (linked servers, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))

Anforderungen an ToolsTool Requirements

  • SQL Server Management Studio-Version 18 oder höher wird empfohlen, um Abfragen auszuführen, die die aus verschlüsselten Spalten abgerufenen Ergebnisse entschlüsseln oder verschlüsselte Spalten einfügen, aktualisieren oder filtern.SQL Server Management Studio version 18 or higher is recommended to run queries that decrypt the results retrieved from encrypted columns or insert, update, or filter encrypted columns.
  • Erfordert sqlcmd-Version 13.1 oder höher, die im Download Center verfügbar ist.Requires sqlcmd version 13.1 or higher, which is available from the Download Center.

DatenbankberechtigungenDatabase Permissions

Es gibt vier Berechtigungen für Always Encrypted:There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Zum Erstellen und Löschen eines Spaltenhauptschlüssels erforderlich.)ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Zum Erstellen und Löschen eines Spaltenverschlüsselungsschlüssels erforderlich.)ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Zum Lesen der Metadaten der Spaltenhauptschlüssel sowie für den Zugriff erforderlich, um Schlüssel zu verwalten oder verschlüsselte Spalten abzufragen.)VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Zum Lesen der Metadaten des Spaltenverschlüsselungsschlüssels sowie für den Zugriff erforderlich, um Schlüssel zu verwalten oder verschlüsselte Spalten abzufragen.)VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

In der folgenden Tabelle werden die erforderlichen Berechtigungen für häufig verwendete Aktionen zusammengefasst.The following table summarizes the permissions required for common actions.

SzenarioScenario 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)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Abfragen von verschlüsselten SpaltenQuerying encrypted columns XX XX

Wichtige Hinweise:Important notes:

  • Die Berechtigungen gelten für Aktionen, die Transact-SQLTransact-SQL, Management StudioManagement Studio (Dialogfelder und Assistent) oder PowerShell verwenden.The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • Die beiden VIEW-Berechtigungen werden benötigt, wenn verschlüsselte Spalten ausgewählt werden, auch wenn der Benutzer über keine Berechtigung für die Entschlüsselung der Spalten verfügt.The two VIEW permissions are required when selecting encrypted columns, even if the user doesn't have permission to decrypt the columns.

  • In SQL ServerSQL Server, werden beide VIEW -Berechtigungen standardmäßig an die feste Datenbankrolle public erteilt.In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Ein Datenbankadministrator kann die VIEW -Berechtigungen an die public -Rolle aufheben (oder verweigern) und sie bestimmten Rollen oder Benutzern gewähren, um mehr eingeschränkte Kontrolle zu implementieren.A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • In SQL-DatenbankSQL Database werden beide VIEW-Berechtigungen standardmäßig nicht an die feste Datenbankrolle public erteilt.In SQL-DatenbankSQL Database, the VIEW permissions aren't granted by default to the public fixed database role. Auf diese Weise können bestimmte vorhandene Legacytools (die ältere Versionen von DacFx verwenden) ordnungsgemäß funktionieren.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Demzufolge muss ein Datenbankadministrator explizit die beiden VIEW -Berechtigungen erteilen, um mit verschlüsselten Spalten zu arbeiten (auch wenn sie nicht entschlüsselt werden).Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

BeispielExample

Der folgende Transact-SQLTransact-SQL -Befehl erstellt Spaltenhauptschlüssel-Metadaten, Spaltenverschlüsselungsschlüssel-Metadaten und eine Tabelle mit verschlüsselten Spalten.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Informationen zum Erstellen der Schlüssel, auf die in den Metadaten verwiesen wird, finden Sie unter:For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  
  

Weitere InformationenSee Also