Always EncryptedAlways Encrypted

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Постоянное шифрованиеAlways Encrypted

Always Encrypted — это функция, предназначенная для защиты конфиденциальных данных, таких как номера кредитных карт или номера документов (например, номеров социального страхования в США), которые хранятся в базах данных База данных SQL AzureAzure SQL Database и SQL ServerSQL Server.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 База данных SQL AzureAzure SQL Database or SQL ServerSQL Server databases. Постоянное шифрование позволяет клиентам шифровать конфиденциальные данные в клиентских приложениях, не раскрывая ключи шифрования Компонент Database EngineDatabase Engine (База данных SQLSQL Database или SQL ServerSQL Server).Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Компонент Database EngineDatabase Engine (База данных SQLSQL Database or SQL ServerSQL Server). Таким образом, постоянное шифрование позволяет разделить пользователей на тех, кто владеет данными или имеет право их просматривать, и тех, кто управляет данными, но не должен иметь к ним доступа.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. У локальных администраторов баз данных, операторов облачных баз данных и других неавторизованных пользователей с высоким уровнем привилегий нет доступа к зашифрованным данным, поэтому постоянное шифрование позволяет клиентам хранить конфиденциальные данные вне сферы их непосредственного контроля.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. При этом организации могут хранить данные в Azure, делегировать права администратора локальной базы данных третьим лицам или упростить требования к безопасности для собственных администраторов базы данных.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 предоставляет возможности конфиденциальных вычислений, позволяя Компонент Database EngineDatabase Engine обрабатывать некоторые запросы к зашифрованным данным, при этом сохраняя конфиденциальность данных и предоставляя указанные выше преимущества безопасности.Always Encrypted provides confidential computing capabilities by enabling the Компонент Database EngineDatabase Engine to process some queries on encrypted data, while preserving the confidentiality of the data and providing the above security benefits. В SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) и База данных SQL AzureAzure SQL Database Always Encrypted поддерживает сравнение на равенство через детерминированное шифрование.In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in База данных SQL AzureAzure SQL Database, Always Encrypted supports equality comparison via deterministic encryption. См. раздел Выбор детерминированного или случайного шифрования.See Selecting Deterministic or Randomized Encryption.

Примечание

В SQL Server 2019 (15.x)SQL Server 2019 (15.x) безопасные анклавы существенно расширяют возможности конфиденциальных вычислений Always Encrypted с помощью сопоставления шаблонов, других операторов сравнения и шифрования на месте.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. См. раздел Always Encrypted с безопасными анклавами.See Always Encrypted with secure enclaves.

Постоянное шифрование делает шифрование прозрачным для приложений.Always Encrypted makes encryption transparent to applications. Драйвер с поддержкой постоянного шифрования, установленный на клиентском компьютере, реализует это за счет автоматического шифрования и расшифровки конфиденциальных данных в клиентском приложении.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. Драйвер шифрует данные из конфиденциальных столбцов перед их передачей в Компонент Database EngineDatabase Engineи автоматически переписывает запросы, чтобы сохранить семантику приложения.The driver encrypts the data in sensitive columns before passing the data to the Компонент Database EngineDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. Аналогичным образом драйвер прозрачно расшифровывает данные, хранящиеся в столбцах зашифрованной базы данных, которые содержатся в результатах запроса.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted доступен во всех выпусках База данных SQL AzureAzure SQL Database, начиная с SQL Server 2016 (13.x)SQL Server 2016 (13.x), и всех уровней служб База данных SQLSQL Database.Always Encrypted is available in all editions of База данных SQL AzureAzure SQL Database, starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and all service tiers of База данных SQLSQL Database. (До версии SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 шифрование Always Encrypted было ограничено выпуском Enterprise Edition.) Презентацию с описанием постоянного шифрования на канале 9 см. на странице Безопасное хранение конфиденциальных данных с помощью постоянного шифрования.(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.

Типичные сценарииTypical Scenarios

Клиент и данные в локальной средеClient and data on-premises

У клиента есть клиентское приложение и SQL ServerSQL Server , которые работают в локальной среде на предприятии.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. Клиент хочет нанять внешнего поставщика для администрирования SQL ServerSQL Server.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Чтобы защитить конфиденциальные данные в SQL ServerSQL Server, клиент использует постоянное шифрование для разделения обязанностей между администраторами баз данных и администраторами приложений.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. Клиент сохраняет значения ключей постоянного шифрования в открытом тексте в доверенном хранилище ключей, доступном клиентскому приложению.The customer stores plaintext values of Always Encrypted keys in a trusted key store, which the client application can access. У администраторовSQL ServerSQL Server нет доступа к ключам, поэтому они не могут расшифровать конфиденциальные данные в SQL ServerSQL Server.SQL ServerSQL Server administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Клиент в локальной среде, а данные в AzureClient on-premises with data in Azure

У клиента есть локальное клиентское приложение, развернутое на предприятии.A customer has an on-premises client application at their business location. Приложение работает с конфиденциальными данными, хранящимися в базе данных, которая размещена в Azure (База данных SQLSQL Database или SQL ServerSQL Server , выполняемом на виртуальной машине в Microsoft Azure).The application operates on sensitive data stored in a database hosted in Azure (База данных SQLSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). Клиент использует постоянное шифрование и хранит ключи в локальном доверенном хранилище ключей, чтобы у администраторов облака MicrosoftMicrosoft не было доступа к конфиденциальным данным.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.

Клиент и данные в AzureClient and Data in Azure

У клиента есть клиентское приложение, размещенное в Microsoft Azure (например, рабочая роль или веб-роль), которое работает с конфиденциальными данными, хранящимися в базе данных, размещенной в Azure (базе данных SQL или SQL Server в виртуальной машине Microsoft Azure).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). Несмотря на то, что Always Encrypted не обеспечивает полной изоляции данных от облачных администраторов, поскольку и данные, и ключи доступны администраторам облака на платформе, где размещен клиентский уровень, клиент все равно извлекает преимущества из уменьшения площади поверхности атак на систему безопасности (данные в базе данных всегда зашифрованы).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).

Принцип работыHow it Works

Можно настроить постоянное шифрование для отдельных столбцов базы данных, которые содержат ваши конфиденциальные данные.You can configure Always Encrypted for individual database columns containing your sensitive data. При настройке шифрования для столбца вы указываете сведения об алгоритме шифрования и криптографических ключах, используемых для защиты данных в столбце.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 uses two types of keys: column encryption keys and column master keys. Ключ шифрования столбца используется для шифрования данных в зашифрованном столбце.A column encryption key is used to encrypt data in an encrypted column. Главный ключ столбца — это ключ защиты ключа, который шифрует один или несколько ключей шифрования столбца.A column master key is a key-protecting key that encrypts one or more column encryption keys.

Компонент Database Engine сохраняет конфигурацию шифрования для каждого столбца в метаданных базы данных.The Database Engine stores encryption configuration for each column in database metadata. Отметим, однако, что Database Engine никогда не сохраняет и не использует ключи какого-либо из этих типов в форме обычного текста.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Здесь только хранятся зашифрованные значения ключей шифрования столбцов и информация о расположении главных ключей столбца, которые хранятся во внешних доверенных хранилищах ключей, например Azure Key Vault или хранилище сертификатов Windows на клиентском компьютере, либо в аппаратном модуле безопасности.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.

Для доступа к данным, сохраненным в зашифрованном столбце в виде обычного текста, в приложении необходимо использовать клиентский драйвер с включенным постоянным шифрованием.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Если приложение отправляет параметризованный запрос, драйвер прозрачно взаимодействует с Database Engine, чтобы определить, какие параметры относятся к зашифрованным столбцам и, следовательно, должны быть зашифрованы.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. Для каждого параметра, который должен быть зашифрован, драйвер получает информацию об алгоритме шифрования и зашифрованное значение ключа шифрования столбца для столбца, к которому относится параметр, а также расположение соответствующего главного ключа столбца.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.

Затем драйвер обращается к хранилищу ключей, которое содержит главный ключ столбца, чтобы расшифровать зашифрованное значение ключа шифрования столбца, а затем использует ключ шифрования столбца с обычным текстом, чтобы зашифровать параметр.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. Получившийся ключ шифрования столбца с обычным текстом кэшируется с целью уменьшения количества циклов обмена данными с хранилищем ключей при последующем использовании того же ключа шифрования столбца.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. Драйвер подставляет вместо значений параметров, относящихся к зашифрованным столбцам, в виде обычного текста их зашифрованные значения и отправляет запрос на сервер для обработки.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.

Сервер вычисляет набор результатов, и для всех зашифрованных столбцов в результирующем наборе драйвер прикрепляет метаданные шифрования для столбца, включая сведения об алгоритме шифрования и соответствующих ключах.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. Драйвер сначала пытается найти ключ шифрования столбца с обычным текстом в локальном кэше и обращается к главному ключу столбца только в том случае, если не может найти ключ в кэше.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. Затем драйвер расшифровывает результаты и возвращает значения в виде обычного текста в приложение.Next, the driver decrypts the results and returns plaintext values to the application.

Клиентский драйвер взаимодействует с хранилищем ключа, которое содержит главный ключ столбца, используя поставщик хранилищ главных ключей столбцов. Этот поставщик представляет собой клиентский программный компонент, который инкапсулирует хранилище ключей, содержащее главный ключ столбца.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. Поставщики распространенных типов хранилищ ключей доступны в клиентских библиотеках драйверов Майкрософт или как изолированные файлы для скачивания.Providers for common types of key stores are available in client-side driver libraries from Microsoft or as standalone downloads. Кроме того, можно реализовать собственный поставщик.You can also implement your own provider. Функции Always Encrypted, включая встроенные поставщики хранилищ главных ключей столбцов, различаются по библиотеке драйверов и ее версии.Always Encrypted capabilities, including built-in column master key store providers vary by a driver library and its version.

Дополнительные сведения о разработке приложений с помощью Always Encrypted с определенными клиентскими драйверами см. в разделе Разработка приложений с помощью Always Encrypted.For details of how to develop applications using Always Encrypted with particular client drivers, see Develop applications using Always Encrypted.

RemarksRemarks

Расшифровка происходит с помощью клиента.Decryption occurs via the client. Это означает, что некоторые действия, которые происходят только на стороне сервера, при использовании Always Encrypted работать не будут.This means that some actions that occur only server-side won't work when using Always Encrypted.

Пример инструкции "update", которая пытается переместить данные из зашифрованного столбца в незашифрованный, не возвращая в клиент результирующий набор: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

Если SSN — столбец с шифрованием Always Encrypted, инструкция "update", приведенная выше, не сработает и выдаст следующую ошибку: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

Чтобы обновить столбец, сделайте следующее.To successfully update the column, do the following:

  1. Выберите (SELECT) данные в столбце SSN и сохраните их в приложении как результирующий набор.SELECT the data out of the SSN column, and store it as a result set in the application. Это позволит приложению (драйвер клиента) расшифровать столбец.This will allow for the application (client driver) to decrypt the column.
  2. Вставьте (INSERT) данные из результирующего набора в SQL Server.INSERT the data from the result set into SQL Server.

Важно!

В этом сценарии при обратной отправке на сервер данные будут расшифрованы, так как целевой столбец имеет обычный тип "varchar" и не принимает зашифрованные данные.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.

Выбор детерминированного или случайного шифрованияSelecting Deterministic or Randomized Encryption

Database Engine никогда не работает с данными в виде обычного текста, хранимыми в зашифрованных столбцах, но поддерживает определенные запросы, адресованные зашифрованным данным, в зависимости от типа шифрования для столбца.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 supports two types of encryption: randomized encryption and deterministic encryption.

  • Детерминированное шифрование всегда создает одно и то же зашифрованное значение для любого текстового значения.Deterministic encryption always generates the same encrypted value for any given plain text value. Использование детерминированного шифрования позволяет выполнять поиск точек, создавать соединения равенства, группировать и индексировать зашифрованные столбцы.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. Тем не менее в этом случае несанкционированные пользователи также могут угадать информацию о зашифрованных значениях, изучив закономерности в зашифрованном столбце, особенно при наличии небольшого набора возможных зашифрованных значений, таких как True и False или Север, Юг, Восток, Запад.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. При использовании детерминированного шифрования необходимо указать порядок сортировки binary2 в параметрах сортировки для символьных столбцов.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • Случайное шифрование использует метод, который шифрует данные менее предсказуемым образом.Randomized encryption uses a method that encrypts data in a less predictable manner. Случайное шифрование более безопасно, но не позволяет выполнять поиск, группировку, индексирование и объединение по зашифрованным столбцам.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Детерминированное шифрование используется для столбцов, которые будут применяться в качестве параметров поиска или группирования.Use deterministic encryption for columns that will be used as search or grouping parameters. Например, ИНН.For example, a government ID number. Используйте случайное шифрование для данных, например конфиденциальных комментариев о расследованиях, которые не сгруппированы с другими записями и не используются для соединения таблиц.Use randomized encryption for data such as confidential investigation comments, which aren't grouped with other records and aren't used to join tables. Подробные сведения об алгоритмах шифрования Always Encrypted см. в разделе Шифрование Always Encrypted.For details on Always Encrypted cryptographic algorithms, see Always Encrypted cryptography.

Настройка постоянного шифрованияConfiguring Always Encrypted

Первоначальная настройка постоянного шифрования в базе данных подразумевает создание ключей постоянного шифрования и метаданных этих ключей, настройку свойств шифрования столбцов выбранной базы данных и (или) шифрование данных, которые, возможно, уже существуют в столбцах, которые требуется зашифровать.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. Обратите внимание, что некоторые из этих задач не поддерживаются в Transact-SQL и требуют использования клиентских средств.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Поскольку ключи постоянного шифрования и защищенные конфиденциальные данные никогда не открываются серверу в виде обычного текста, Database Engine невозможно использовать для подготовки ключей и шифрования или расшифровки данных.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. Для выполнения этих задач можно использовать SQL Server Management Studio или PowerShell.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

ЗадачаTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Подготовка главных ключей столбца, ключей шифрования столбцов и ключей шифрования зашифрованных столбцов с соответствующими главными ключами столбца.Provisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. ДаYes ДаYes нетNo
Создание ключа метаданных в базе данных.Creating key metadata in the database. ДаYes ДаYes ДаYes
Создание новых таблиц с зашифрованными столбцамиCreating new tables with encrypted columns ДаYes ДаYes ДаYes
Шифрование существующих данных в выбранных столбцах базы данныхEncrypting existing data in selected database columns ДаYes ДаYes нетNo

Примечание

Always Encrypted с безопасными анклавами, представленными в SQL Server 2019 (15.x)SQL Server 2019 (15.x), поддерживает шифрование существующих данных с помощью 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. Это также избавляет от необходимости перемещать данные за пределы хранилища для криптографических операций.It also eliminates the need to move the data outside of the data for cryptographic operations.

Примечание

Убедитесь, что запуск инструментов подготовки ключей или шифрования данных осуществляется в безопасной среде, на компьютере, отличном от компьютера, на котором размещена ваша база данных.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. В противном случае возможна утечка конфиденциальных данных или ключей в серверную среду, что сведет преимущества использования постоянного шифрования к минимуму.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Дополнительные сведения о настройке постоянного шифрования см. в следующих разделах:For details on configuring Always Encrypted see:

Приступая к работе с постоянным шифрованиемGetting Started with Always Encrypted

Используйте мастер постоянного шифрования , чтобы быстро приступить к использованию постоянного шифрования.Use the Always Encrypted Wizard to quickly start using Always Encrypted. Этот мастер подготовит необходимые ключи и настроит шифрование для выбранных столбцов.The wizard will provision the required keys and configure encryption for selected columns. Если столбцы, для которых настраивается шифрование, уже содержат определенные данные, мастер зашифрует эти данные.If the columns you're setting encryption for already contain some data, the wizard will encrypt the data. В следующих примерах показан процесс шифрования столбца.The following example demonstrates the process for encrypting a column.

Примечание

Видео, в котором демонстрируется использование мастера, см. на странице Начало работы с постоянным шифрованием с помощью SSMS.For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Подключитесь к существующей базе данных, которая содержит таблицы со столбцами, которые требуется зашифровать, с помощью обозревателя объектов в составе Management Studio или создайте новую базу данных, одну или несколько таблиц со столбцами, которые необходимо зашифровать, и подключитесь к ней.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. Щелкните правой кнопкой мыши базу данных, наведите курсор на пункт Задачи, а затем щелкните Зашифровать столбцы, чтобы открыть мастер Always Encrypted.Right-click your database, point to Tasks, and then click Encrypt Columns to open the Always Encrypted Wizard.
  3. Прочитайте страницу Введение , а затем нажмите кнопку Далее.Review the Introduction page, and then click Next.
  4. На странице Выбор столбцов разверните таблицы и выберите столбцы, которые необходимо зашифровать.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. В каждом шифруемом столбце для параметра Тип шифрования выберите значение Детерминированное или Случайное.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Для каждого столбца, выбранного для шифрования, выберите ключ шифрования.For each column selected for encryption, select an Encryption Key. Если вам раньше не приходилось создавать ключи шифрования для этой базы данных, выберите параметр по умолчанию для автоматического создания ключа и нажмите Далее.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. На странице Конфигурация главного ключа выберите расположение для сохранения нового ключа и источник главного ключа, а затем нажмите кнопку Далее.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. На странице Проверка выберите, требуется ли немедленно запустить сценарий, или создайте сценарий PowerShell и нажмите кнопку Далее.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. На странице Сводка просмотрите выбранные параметры и нажмите кнопку Готово.On the Summary page, review the options you've selected, and then click Finish. Закройте мастер после завершения.Close the wizard when completed.

Сведения о возможностяхFeature Details

  • Запросы могут выполнять сравнение на равенство по столбцам, зашифрованным с помощью детерминированного шифрования, но не другие операции (например, больше или меньше, сопоставление шаблонов с помощью оператора LIKE или арифметические операции).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).

  • Запросы для столбцов, зашифрованных с помощью случайного шифрования, не могут выполнять никаких операций.Queries on columns encrypted by using randomized encryption can't perform operations on any of those columns. Индексирование столбцов, зашифрованных с помощью случайного шифрования, не поддерживается.Indexing columns encrypted using randomized encryption isn't supported.

Примечание

Always Encrypted с безопасными анклавами, представленными в SQL Server 2019 (15.x)SQL Server 2019 (15.x), устраняет описанное выше ограничение, включая сопоставление шаблонов, операторы сравнения и индексирование столбцов с использованием случайного шифрования.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.

  • У ключа шифрования столбца может быть до двух разных зашифрованных значений, каждое из которых зашифровано с помощью различных главных ключей столбца.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Это позволяет менять главные ключи столбца.This facilitates column master key rotation.

  • Для детерминированного шифрования к столбцу необходимо применять один из параметров сортировки binary2.Deterministic encryption requires a column to have one of the binary2 collations.

  • После изменения определения для зашифрованного объекта выполнение процедуру sp_refresh_parameter_encryption для обновления метаданных постоянного шифрования.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted не поддерживается для столбцов с указанными ниже характеристиками.Always Encrypted isn't supported for the columns with the below characteristics. Например, если какое-либо из следующих условий применяется к столбцу, предложение ENCRYPTED WITH нельзя использовать в CREATE TABLE/ALTER TABLE для столбца: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:

  • Столбцы, использующие один из следующих типов данных: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, псевдонимы, определяемые пользователем типы.Columns using one of the following data types: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Столбцы FILESTREAMFILESTREAM columns
  • Столбцы со свойством IDENTITY.Columns with the IDENTITY property.
  • Столбцы со свойством ROWGUIDCOL.Columns with ROWGUIDCOL property.
  • Строки (varchar, char и т. д.), столбцы с параметрами сортировки, отличными от bin2String (varchar, char, etc.) columns with non-bin2 collations.
  • Столбцы, которые являются ключевыми для некластеризованных индексов, использующие столбец со случайным шифрованием в качестве ключевого (столбцы с детерминированным шифрованием допустимы).Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Столбцы, которые являются ключевыми для кластеризованных индексов, использующие столбец со случайным шифрованием в качестве ключевого (столбцы с детерминированным шифрованием допустимы).Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Столбцы, которые являются ключевыми для полнотекстовых индексов, содержащие зашифрованные столбцы со случайным и детерминированным шифрованием.Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic.
  • вычисляемые столбцы;Computed columns.
  • Столбцы, на которые ссылаются вычисляемые столбцы (если выражение выполняет неподдерживаемые операции для постоянного шифрования).Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted).
  • Набор разреженных столбцов.Sparse column set.
  • Столбцы, на которые ссылается статистика.Columns that are referenced by statistics.
  • Столбцы, использующие псевдоним типа.Columns using alias type.
  • Столбцы секционирования.Partitioning columns.
  • Столбцы с ограничениями по умолчанию.Columns with default constraints.
  • Столбцы, на которые ссылаются уникальные ограничения при использовании случайного шифрования (детерминированное шифрование поддерживается).Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported).
  • Столбцы первичного ключа при использовании случайного шифрования (детерминированное шифрование поддерживается).Primary key columns when using randomized encryption (deterministic encryption is supported).
  • Ссылающиеся столбцы в ограничениях внешнего ключа при использовании случайного или детерминированного шифрования, если ссылающиеся и целевые столбцы применяют различные ключи или алгоритмы.Referencing 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.
  • Столбцы, на которые ссылаются проверочные ограничения.Columns referenced by check constraints.
  • Столбцы в таблицах, использующих систему отслеживания измененных данных.Columns in tables that use change data capture.
  • Столбцы первичных ключей в таблицах с отслеживанием изменений.Primary key columns on tables that have change tracking.
  • Столбцы, которые маскируются (с помощью маскирования динамических данных).Columns that are masked (using Dynamic Data Masking).
  • Столбцы в таблицах базы данных Stretch.Columns in Stretch Database tables. (Таблицы со столбцами, использующими постоянное шифрование, можно включить для базы данных Stretch.)(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • Столбцы во внешних таблицах (PolyBase) (примечание: использование внешних таблиц и таблиц с зашифрованными столбцами в одном запросе поддерживается).Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported).
  • Возвращающие табличные значения параметры, предназначенные для зашифрованных столбцов, не поддерживаются.Table-valued parameters targeting encrypted columns aren't supported.

Следующие предложения не могут использоваться для зашифрованных столбцов:The following clauses can't be used for encrypted columns:

  • FOR XML
  • FOR JSON PATH

Следующие функции не работают для зашифрованных столбцов:The following features don't work on encrypted columns:

  • репликация транзакций или репликация слиянием;Transactional or merge replication
  • распределенные запросы (связанные серверы, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL)).Distributed queries (linked servers, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))

Требования к средствамTool Requirements

  • Рекомендуется SQL Server Management Studio версии 18 или более поздних версий для выполнения запросов, которые расшифровывают результаты, полученные из зашифрованных столбцов, или операций вставки, обновления или фильтрации для зашифрованных столбцов.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.
  • Требуется sqlcmd версии 13.1 или более поздней, который доступен в Центре загрузки.Requires sqlcmd version 13.1 or higher, which is available from the Download Center.

Разрешения базы данныхDatabase Permissions

Существует четыре разрешения для постоянного шифрования:There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Требуется для создания и удаления главного ключа столбца.)ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Требуется для создания и удаления ключа шифрования столбца.)ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Требуется для доступа к метаданным главных ключей столбцов и их чтения с целью управления ключами или отправки запросов в зашифрованные столбцы.)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 (Требуется для доступа к метаданным ключей шифрования столбцов и их чтения с целью управления ключами или отправки запросов в зашифрованные столбцы.)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.)

В следующей таблице приводятся обобщенные сведения о разрешениях, необходимых для выполнения стандартных действий.The following table summarizes the permissions required for common actions.

СценарийScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Управление ключами (создание, изменение или просмотр метаданных ключа в базе данных)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Отправка запросов в зашифрованные столбцыQuerying encrypted columns XX XX

Важные примечания.Important notes:

  • Разрешения распространяются на действия, которые выполняются с использованием Transact-SQLTransact-SQL, Среда Management StudioManagement Studio (диалоговые окна и мастер) или PowerShell.The permissions apply to actions using Transact-SQLTransact-SQL, Среда Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • Два разрешения VIEW требуются при выборе зашифрованных столбцов, даже если у пользователя нет разрешения на расшифровку столбцов.The two VIEW permissions are required when selecting encrypted columns, even if the user doesn't have permission to decrypt the columns.

  • В SQL ServerSQL Serverоба разрешения VIEW по умолчанию предоставляются фиксированной роли базы данных public .In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Администратор базы данных может отозвать разрешения VIEW (или оказать в них) у роли public и предоставить их конкретным ролям или пользователям в целях осуществления более ограниченного контроля.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.

  • В База данных SQLSQL Database разрешения VIEW не предоставляются по умолчанию для фиксированной роли базы данных public.In База данных SQLSQL Database, the VIEW permissions aren't granted by default to the public fixed database role. Благодаря этому некоторые существующие (устаревшие) инструменты, в работе которых используются более старые версии DacFx, функционируют нормально.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Следовательно, для работы с зашифрованными столбцами (даже если не расшифровывать их) администратор базы данных должен явно предоставить два разрешения VIEW .Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

ПримерExample

Следующая операция Transact-SQLTransact-SQL создает метаданные главного ключа столбца, метаданные ключа шифрования столбца и таблицу с зашифрованными столбцами.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Сведения о создании ключей, на которые ссылаются метаданные, см. в следующих разделах.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  
  

См. также:See Also