Руководство. Начало работы с Always Encrypted с безопасными анклавами в SQL Server

Область применения: SQL Server 2019 (15.x) и более поздних версий — только для Windows

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

  • Как создать базовую среду для тестирования и оценки Always Encrypted с безопасными анклавами без аттестации, настроенной для анклава.
  • Шифрование данных на месте и выдача полнофункциональных конфиденциальных запросов к зашифрованным столбцам с помощью SQL Server Management Studio (SSMS).

Если вы хотите узнать, как настроить Always Encrypted с безопасными анклавами с помощью службы защиты узла для аттестации анклава, см . руководство. Начало работы с Always Encrypted с безопасными анклавами в SQL Server с аттестацией с помощью HGS

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

Компьютер, на котором размещен экземпляр SQL Server (называемый компьютером SQL Server), должен соответствовать следующим требованиям:

  • SQL Server 2019 (15.x) или более поздней версии.
  • Windows 10 или более поздней версии, Windows Server 2019 или более поздней версии.
  • Поддержка ЦП для технологий виртуализации:
    • Intel VT-x с Extended Page Tables.
    • AMD-V с Rapid Virtualization Indexing.
    • Если вы используете SQL Server на виртуальной машине:
      • В Azure используйте размер виртуальной машины 2-го поколения (рекомендуется) или размер виртуальной машины 1-го поколения с включенной вложенной виртуализацией. Изучите документацию по размерам отдельных виртуальных машин, чтобы определить, какие размеры виртуальных машин 1-го поколения поддерживают вложенную виртуализацию.
      • В Hyper-V 2016 или более поздней версии (за пределами Azure) убедитесь, что виртуальная машина — это виртуальная машина поколения 2 (рекомендуется) или виртуальная машина поколения 1 с включенной вложенной виртуализацией. Дополнительные сведения см. в статьях о том, как выбрать поколение для виртуальной машины в Hyper-V, и о настройке вложенной виртуализации.
      • В VMware vSphere 6.7 или более поздней версии включите для виртуальной машины поддержку безопасности на основе виртуализации, как описано в документации VMware.
      • Другие низкоуровневые оболочки и общедоступные облака могут поддерживать возможности вложенной виртуализации, позволяющие использовать Always Encrypted с анклавами VBS. Просмотрите сведения о совместимости и инструкции по настройке в документации по своему решению для виртуализации.
  • Последняя версия SQL Server Management Studio (SSMS). Кроме того, можно установить SSMS на другом компьютере.

Предупреждение

В рабочих средах выполнение SSMS или других средств управления ключами на компьютере SQL Server может привести к ухудшению защиты, обеспечиваемой Always Encrypted. Как правило, такие средства рекомендуется выполнять на другом компьютере. Дополнительные сведения см. в разделе Security Considerations for Key Management(Вопросы безопасности для управления ключами).

Шаг 1. Убедитесь, что безопасность на основе виртуализации (VBS) включена

  1. Войдите на компьютер SQL Server с правами администратора, откройте консоль Windows PowerShell с повышенными привилегиями и запустите msinfo32.exe. Проверьте, запущен ли VBS. Если VBS запущена, пропустите оставшиеся шаги в этом разделе и перейдите к следующему разделу.

    Screenshot of the System Information virtualization-based security details.

  2. Включите VBS, выполнив следующий командлет в сеансе PowerShell.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
    
  3. Если SQL Server работает на виртуальной машине или на физическом компьютере, который не поддерживает безопасную загрузку UEFI или не имеет блок IOMMU, вам нужно удалить требование VBS для функций безопасности платформы. Удалите требование безопасной загрузки и IOMMU, выполнив следующую команду на своем компьютере SQL Server в консоли PowerShell, запущенной с повышенными правами.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
    
  4. Перезапустите компьютер SQL Server еще раз, чтобы получить VBS для подключения к сети.

    Restart-Computer
    
  5. Повторите шаг 1, чтобы проверить, запущен ли VBS.

Шаг 2. Включение Always Encrypted с безопасными анклавами в SQL Server

На этом шаге выполняется включение функциональности Always Encrypted с использованием анклавов в экземпляре SQL Server.

  1. От имени системного администратора с помощью SSMS подключитесь к экземпляру SQL Server без включенной функции Always Encrypted для подключения к базе данных.

    1. Запустите SSMS.

    2. В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.

    3. Нажмите Параметры >> и выберите вкладку Always Encrypted.

    4. Убедитесь, что флажок Включить Always Encrypted (шифрование столбцов)не установлен.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Нажмите Подключиться.

  2. Откройте новое окно запроса и выполните следующую инструкцию, чтобы задать безопасный тип анклава для безопасности на основе виртуализации (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Перезапустите экземпляр SQL Server, чтобы предыдущее изменение вступило в силу. Можно перезапустить этот экземпляр в SSMS, щелкнув его правой кнопкой мыши в обозревателе объектов и выбрав "Перезапуск". После перезагрузки экземпляра снова подключитесь к нему.

  4. Убедитесь, что безопасный анклав загружен, выполнив следующий запрос:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    По результатам запроса должен возвращаться следующий результат:

    name значение value_in_use
    column encryption enclave type (тип анклава для шифрования столбцов) 1 1

Шаг 3. Создание образца базы данных

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

  1. С помощью экземпляра SSMS из предыдущего шага выполните приведенную ниже инструкцию в окне запроса, чтобы создать новую базу данных с именем ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Создайте новую таблицу с именем Employees.

    USE [ContosoHR];
    GO
    
    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];
    
  3. Добавьте несколько записей о сотрудниках в таблицу Employees.

    USE [ContosoHR];
    GO
    
    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);
    

Шаг 4. Подготовка ключей с поддержкой анклава

На этом шаге вы создадите главный ключ столбца и ключ шифрования столбца, который разрешает вычисления анклава.

  1. С помощью экземпляра SSMS из предыдущего шага в обозревателе объектов разверните базу данных и перейдите к пункту Безопасность>Ключи Always Encrypted.

  2. Подготовьте новый главный ключ столбца с поддержкой анклава:

    1. Щелкните правой кнопкой мыши Ключи Always Encrypted и выберите Создать главный ключ столбца....

    2. Выберите имя главного ключа столбца: CMK1.

    3. Убедитесь, что выбрано значение Хранилище сертификатов Windows (текущий пользователь или локальный компьютер) или Azure Key Vault.

    4. Выберите Разрешить вычисления анклава.

    5. Если вы выбрали Azure Key Vault, войдите в Azure и выберите хранилище ключей. Дополнительные сведения о создании хранилища ключей для Always Encrypted см. в статье Управление хранилищами ключей на портале Azure.

    6. Выберите сертификат или ключ Azure Key Vault, если он существует, или нажмите Создать сертификат, чтобы создать новый сертификат.

    7. Нажмите ОК.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Создайте ключ шифрования столбцов с поддержкой анклава:

    1. Щелкните правой кнопкой мыши Ключи Always Encrypted и выберите Создать ключ шифрования столбца.
    2. Введите имя для нового ключа шифрования столбцов: CEK1.
    3. В раскрывающемся списке Главный ключ столбца выберите ключ, созданный на предыдущих шагах.
    4. Нажмите ОК.

Шаг 5. Шифрование некоторых столбцов на месте

На этом шаге вы выполните шифрование данных, хранящихся в столбцах SSN и Salary в анклаве на стороне сервера, а затем протестируете запрос SELECT к данным.

  1. Откройте новый экземпляр SSMS и подключитесь к экземпляру SQL Server с включенной функцией Always Encrypted для подключения к базе данных.

    1. Создайте новый экземпляр SSMS.

    2. В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.

    3. Нажмите Параметры >> и выберите вкладку Always Encrypted.

    4. Установите флажок Enable Always Encrypted (шифрование столбцов).

    5. Выберите "Включить безопасные анклава".

    6. Задайте для протокола значение None.

      Screenshot of the connect to server Always Encrypted tab without attestation using SSMS.

    7. Нажмите Подключиться.

    8. Если отобразится запрос на включение параметризации для запросов Always Encrypted, нажмите кнопку Включить.

  2. Используя тот же экземпляр SSMS (с включенной функцией Always Encrypted), откройте новое окно запроса и выполните шифрование столбцов SSN и Salary с помощью приведенных ниже запросов.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Заметка

    Обратите внимание на инструкцию ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE для очистки кэша планов запросов в базе данных в приведенном выше скрипте. Изменив таблицу, необходимо очистить планы всех пакетов и хранимых процедур, которые обращаются к таблице, чтобы обновить сведения о параметрах шифрования.

  3. Чтобы убедиться в том, что столбцы SSN и Salary зашифрованы, откройте новое окно запроса в экземпляре SSMS без включенной функции Always Encrypted для подключения к базе данных и выполните приведенную ниже инструкцию. Окно запроса должно возвратить зашифрованные значения столбцов SSN и Salary. Если вы выполните тот же запрос с помощью экземпляра SSMS с включенной функцией Always Encrypted, данные будут расшифрованы.

    SELECT * FROM [HR].[Employees];
    

Шаг 6. Выполнение полнофункциональных запросов к зашифрованным столбцам

Теперь можно выполнять полнофункциональные запросы к зашифрованным столбцам. Некоторая обработка запросов будет выполняться в анклаве на стороне сервера.

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

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

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Попробуйте выполнить тот же запрос еще раз в экземпляре SSMS с отключенной функцией Always Encrypted и запишите код возникшей ошибки.

Далее

После завершения работы с этим учебником вы можете обратиться к одному из следующих учебников:

См. также