Руководство. Начало работы с Always Encrypted

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этом руководстве показано, как приступить к работе с Always Encrypted. В этом руководстве рассматриваются следующие сведения:

  • Как зашифровать выбранные столбцы в базе данных.
  • Как запрашивать зашифрованные столбцы.

Предварительные требования

Для работы с этим руководством необходимы указанные ниже компоненты.

Примечание.

Microsoft рекомендует использовать PowerShell 7 или более поздней версии при выполнении скриптов PowerShell always Encrypted. PowerShell 7 обеспечивает улучшенную кроссплатформенную поддержку, более высокую производительность и последнюю совместимость с модулем SqlServer (версии 22+), который необходим для многих сценариев Always Encrypted.

Шаг 1. Создание и заполнение схемы базы данных

На этом шаге вы создадите схему отдела кадров и таблицу Employees . Затем вы заполните таблицу некоторыми данными.

  1. Подключитесь к базе данных. Инструкции о том, как подключиться к базе данных из SSMS, см. в Кратком руководстве: Подключение к базе данных SQL Azure или Управляемому экземпляру SQL Azure и выполнение запросов к ним с помощью SQL Server Management Studio (SSMS) или Кратком руководстве: Подключение к экземпляру SQL Server и выполнение запросов к нему с помощью SQL Server Management Studio (SSMS).

  2. Откройте новое окно запроса для базы данных ContosoHR .

  3. Вставьте и выполните приведенные ниже инструкции, чтобы создать новую таблицу с именем Employees.

    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL
        , [SSN] [char](11) NOT NULL
        , [FirstName] [nvarchar](50) NOT NULL
        , [LastName] [nvarchar](50) NOT NULL
        , [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  4. Вставьте и выполните приведенные ниже инструкции, чтобы добавить несколько записей сотрудников в таблицу Employees .

    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '795-73-9838'
        , N'Catherine'
        , N'Abel'
        , $31692
    );
    
    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '990-00-6818'
        , N'Kim'
        , N'Abercrombie'
        , $55415
    );
    

Шаг 2. Шифрование столбцов

На этом шаге вы подготовите главный ключ столбца и ключ шифрования столбцов для Always Encrypted. Затем вы зашифруете столбцы SSN и Зарплата в таблице Employees .

В SSMS есть мастер, который помогает с легкостью настроить Always Encrypted, позволяя создать главный ключ столбца, ключ шифрования столбца и зашифровать выбранные столбцы.

  1. В обозреватель объектов разверните Databases>ContosoHR>Tables.

  2. Щелкните правой кнопкой мыши таблицу Employees и выберите "Шифровать столбцы", чтобы открыть мастер Always Encrypted.

    Снимок экрана открытия мастера Always Encrypted.

  3. Нажмите кнопку "Далее" на странице "Введение" мастера.

  4. На странице Выбор столбцов.

    1. Выберите столбцы SSN и Зарплата. Выберите детерминированное шифрование для столбца SSN и случайное шифрование для столбца "Зарплата ". Детерминированное шифрование поддерживает запросы, такие как поиск по точкам, включающих сравнения равенства по зашифрованным столбцам. Случайное шифрование не поддерживает вычисления в зашифрованных столбцах.
    2. Оставьте CEK-Auto1 (New) в качестве ключа шифрования столбца для обоих столбцов. Этот ключ еще не существует и будет создан мастером.
    3. Выберите Далее.

    Снимок экрана выбора столбцов в мастере Always Encrypted.

  5. На странице "Конфигурация главного ключа" настройте новый главный ключ столбца, который будет создан мастером. Сначала необходимо выбрать, где будет храниться главный ключ столбца. Мастер поддерживает два типа хранилища ключей:

    • Azure Key Vault — рекомендуется, если база данных находится в Azure
    • Хранилище сертификатов Windows

    Как правило, Azure Key Vault рекомендуется использовать, особенно если база данных находится в Azure.

    • Чтобы использовать Azure Key Vault, выполните приведенные действия.

      1. Выберите Хранилище ключей Azure.
      2. Выберите вход и завершите вход в Azure.
      3. После входа на страницу отобразится список подписок и хранилищ ключей, к которых у вас есть доступ. Выберите подписку Azure, содержащую хранилище ключей, которую вы хотите использовать.
      4. Выберите нужное хранилище ключей.
      5. Выберите Далее.

      Снимок экрана выбора главного ключа в мастере Always Encrypted с использованием Azure Key Vault.

    • Чтобы использовать хранилище сертификатов Windows, выполните приведенные действия.

      1. Выберите хранилище сертификатов Windows.

      2. Оставьте значение по умолчанию Current User — это укажет мастеру создать сертификат (ваш новый главный ключ столбца) в хранилище Current User.

        Снимок экрана выбора главного ключа в мастере Always Encrypted с использованием хранилища сертификатов.

      3. Выберите Далее.

  6. На странице параметров шифрования на месте дополнительная конфигурация не требуется, так как база данных не включает анклав. Выберите Далее.

  7. На странице "Параметры запуска" вам будет предложено продолжить шифрование или создать скрипт PowerShell для последующего выполнения. Оставьте параметры по умолчанию и нажмите кнопку "Далее".

  8. На странице сводки мастер сообщает о выполняемых действиях. Проверьте правильность всех сведений и нажмите кнопку "Готово".

  9. На странице результатов можно отслеживать ход выполнения операций мастера. Дождитесь успешного завершения всех операций и нажмите кнопку "Закрыть".

    Снимок экрана: сводка мастера Always Encrypted.

  10. (Необязательно) Изучите изменения, внесенные мастером в базу данных.

    1. Разверните ContosoHR>Security>Ключи Always Encrypted, чтобы изучить объекты метаданных для главного ключа столбца и шифрования столбца, созданные мастером.

    2. Вы также можете выполнить приведенные ниже запросы к представлениям системного каталога, содержащим ключевые метаданные.

      SELECT * FROM sys.column_master_keys;
      SELECT * FROM sys.column_encryption_keys
      SELECT * FROM sys.column_encryption_key_values
      
    3. В обозреватель объектов щелкните правой кнопкой мыши таблицу Employees и выберите Script Table as>CREATE To>New Редактор запросов Window. Откроется новое окно запроса с CREATE TABLE инструкцией для таблицы Employees . Обратите внимание, что в определениях столбцов SSN и Зарплата присутствует выражение ENCRYPTED WITH.

    4. Вы также можете выполнить приведенный ниже запрос к sys.column , чтобы получить метаданные шифрования на уровне столбцов для двух зашифрованных столбцов.

      SELECT
      [name]
      , [encryption_type]
      , [encryption_type_desc]
      , [encryption_algorithm_name]
      , [column_encryption_key_id]
      FROM sys.columns
      WHERE [encryption_type] IS NOT NULL;
      

Шаг 3. Запрос зашифрованных столбцов

  1. Подключитесь к базе данных с отключенным параметром Always Encrypted для этого подключения.

    1. Откройте новое окно запроса.
    2. Щелкните правой кнопкой мыши в любом месте в окне запроса и выберите пункт "Изменение подключения".> Откроется диалоговое окно "Подключение к ядру СУБД".
    3. Выберите Параметры<<. При этом в диалоговом окне Подключение к ядру СУБД будут отображаться дополнительные вкладки.
    4. Выберите вкладку Always Encrypted.
    5. Убедитесь, что параметр Enable Always Encrypted (шифрование столбцов) не выбран.
    6. Нажмите Подключиться.

    Снимок экрана: параметр подключения SSMS для always Encrypted отключен.

  2. Вставьте и выполните следующий запрос. Запрос должен возвращать двоичные зашифрованные данные.

    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

    Снимок экрана: результаты текста шифра из зашифрованных столбцов.

  3. Подключитесь к базе данных, включив Always Encrypted для этого подключения.

    1. Щелкните правой кнопкой мыши в любом месте в окне запроса и выберите пункт "Изменение подключения".> Откроется диалоговое окно «Подключение к ядру СУБД».
    2. Выберите Параметры<<. Это приведет к отображению дополнительных вкладок в диалоговом окне Подключение к ядру СУБД.
    3. Выберите вкладку Always Encrypted.
    4. Выберите Включить Always Encrypted (шифрование столбцов).
    5. Нажмите Подключиться.

    Снимок экрана: параметр подключения SSMS для Always Encrypted включен.

  4. Повторно выполните тот же запрос. Так как вы подключены к подключению к базе данных с поддержкой Always Encrypted, драйвер клиента в SSMS попытается расшифровать данные, хранящиеся в обоих зашифрованных столбцах. Если вы используете Azure Key Vault, вам может потребоваться войти в Azure.

    Снимок экрана результатов открытого текста в зашифрованных столбцах.

  5. Включите параметризацию для Always Encrypted. Эта функция позволяет выполнять запросы, фильтрующие данные по зашифрованным столбцам (или вставлять данные в зашифрованные столбцы).

    1. В главном меню SSMS выберите Запрос.
    2. Выберите Параметры запроса....
    3. Перейдите в Выполнение>Дополнительно.
    4. Убедитесь, что установлен флажок включить параметризацию для Always Encrypted .
    5. Нажмите ОК.

    Снимок экрана: включение параметризации в существующем окне запроса.

  6. Вставьте и выполните приведенный ниже запрос, который фильтрует данные по зашифрованному столбцу SSN. Запрос должен возвращать одну строку, содержащую значения обычного текста.

    DECLARE @SSN [char](11) = '795-73-9838'
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    WHERE [SSN] = @SSN
    
  7. При необходимости, если вы используете Azure Key Vault, настроенную с моделью разрешений политики доступа, следуйте приведенным ниже инструкциям, чтобы узнать, что происходит при попытке пользователя получить данные открытого текста из зашифрованных столбцов без доступа к главному ключу столбца, защищающим данные.

    1. Удалите разрешение ключа unwrap для себя в политике доступа для хранилища ключей. Подробнее см. в статье Назначение политики доступа Key Vault.
    2. Так как драйвер клиента в SSMS кэширует ключи шифрования столбцов, полученные из хранилища ключей в течение 2 часов, закройте SSMS и снова откройте его. Это гарантирует, что кэш ключей пуст.
    3. Подключитесь к базе данных, включив Always Encrypted для этого подключения.
    4. Вставьте и выполните следующий запрос. Запрос должен завершиться ошибкой с сообщением, в котором указано, что у вас отсутствует требуемое unwrap разрешение.
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

Следующие шаги

См. также