Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
Главные ключи столбцов являются защищающими ключами, которые используются в режиме постоянного шифрования для кодирования ключей шифрования столбцов. Главные ключи столбцов должны храниться в надежном хранилище ключей и быть доступны для приложений, которым необходимо зашифровать или расшифровать данные, а также для средств для настройки постоянного шифрования и управления ключами постоянного шифрования.
Эта статья содержит подробные сведения о выборе хранилища ключей и создании ключей столбцов Master для функции «Постоянное шифрование». Подробные сведения см. в разделе Overview of Key Management for Always Encrypted(Общие сведения об управлении ключами для постоянного шифрования).
Выбор хранилища ключей для главного ключа шифрования столбца
Always Encrypted поддерживает несколько хранилищ ключей для хранения главных ключей столбцов Always Encrypted. Поддерживаемые хранилища ключей зависят от драйвера и версии, которые вы используете.
Следует принимать во внимание две высокоуровневые категории хранилищ ключей — локальные хранилища ключейи централизованные хранилища ключей.
Локальное или централизованное хранилище ключей?
Локальные хранилища ключей могут использоваться только приложениями на компьютерах с локальным хранилищем ключей. Другими словами, нужно реплицировать хранилище ключей и ключ на каждый компьютер, где запущено приложение. Примером локального хранилища ключей является хранилище сертификатов Windows. При использовании локального хранилища ключей необходимо убедиться, что хранилище ключей существует на каждом компьютере, на котором размещается приложение, и что компьютер содержит главные ключи столбцов, необходимые приложению для доступа к данным, защищенным с помощью постоянного шифрования. При создании основного ключа для столбца данных в первый раз или при его изменении (смене) необходимо убедиться, что ключ будет развернут на всех компьютерах, где размещены ваши приложения.
Централизованные хранилища ключей обслуживают приложения на нескольких компьютерах. Примером централизованного хранилища ключей является хранилище ключей Azure. Централизованное хранилище ключей обычно упрощает управление ключами, так как вам не требуется поддерживать несколько копий главных ключей столбцов на нескольких компьютерах. Убедитесь, что приложения настроены для подключения к централизованному хранилищу ключей.
Какие хранилища ключей поддерживаются клиентскими драйверами с включенным постоянным шифрованием?
Клиентские драйверы с включенным постоянным шифрованием — это драйверы клиента SQL Server со встроенной поддержкой для внедрения постоянного шифрования в клиентские приложения. Водители с поддержкой Always Encrypted содержат несколько встроенных поставщиков для популярных хранилищ ключей. Некоторые драйверы также позволяют реализовывать и регистрировать настраиваемый поставщик хранилища главных ключей столбцов, поэтому вы можете использовать любое хранилище ключей, даже если для него отсутствует встроенный поставщик. Делая выбор между встроенным поставщиком и настраиваемым поставщиком, необходимо учитывать, что использование встроенного поставщика обычно связано с незначительным изменением приложений (в некоторых случаях требуется только изменить строку подключения к базе данных).
Доступные встроенные поставщики зависят от выбранного драйвера, версии драйвера и операционной системы. Обратитесь к документации по Always Encrypted для конкретного драйвера, чтобы определить, какие готовые хранилища ключей поддерживаются, и узнать, поддерживает ли ваш драйвер настраиваемые поставщики хранилищ ключей. См. раздел Разработка приложений с помощью Always Encrypted.
Какие хранилища ключей поддерживаются в инструментах SQL?
SQL Server Management Studio, Azure Data Studio и модуль SqlServer PowerShell поддерживают главные ключи столбцов, хранящиеся в следующих расположениях:
Хранилища ключей и управляемые HSM в Azure Key Vault.
Примечание.
Для управляемых HSM требуется SSMS 18.9 или более поздней версии, а модуль SqlServer PowerShell версии 21.1.18235 или более поздней версии. Azure Data Studio сейчас не поддерживает управляемые модули HSM.
хранилище сертификатов Windows;
Ключевые хранилища, такие как аппаратный модуль безопасности, предоставляющие API шифрования следующего поколения (Cryptography Next Generation, CNG) или Cryptography API (CAPI).
Создание главных ключей столбцов в хранилище сертификатов Windows
Главный ключ столбца может быть сертификатом, который хранится в хранилище сертификатов Windows. Драйвер с поддержкой Always Encrypted не проверяет дату окончания срока действия или цепочку центра сертификации. Сертификат просто используется как пара ключей, состоящая из открытого и закрытого ключей.
Чтобы быть допустимым главным ключом столбца, сертификат должен отвечать следующим условиям:
- являться сертификатом X.509;
- храниться в одном из расположений хранилища сертификатов: local machine или current user (чтобы создать сертификат в хранилище сертификатов локального компьютера, необходимо иметь права администратора на целевом компьютере);
- содержать закрытый ключ (рекомендуемая длина ключей в сертификате — 2048 бит или больше);
- быть созданным для обмена ключами.
Существует несколько способов создания сертификата, который является валидным основным ключом столбца, но проще всего создать самоподписанный сертификат.
Создание самозаверяющего сертификата с помощью PowerShell
Для создания самозаверяющего сертификата используется командлет New-SelfSignedCertificate . В следующем примере показано, как сгенерировать сертификат, который можно использовать в качестве основного ключа столбца для функции "Постоянное шифрование".
# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
Создание самозаверяющего сертификата с помощью среды SQL Server Management Studio (SSMS)
Дополнительные сведения см. в разделе Подготовка к работе ключей Always Encrypted с помощью SQL Server Management Studio. Для пошагового руководства, где используется SSMS и ключи Always Encrypted сохраняются в Хранилище сертификатов Windows, см. Пошаговое руководство мастера Always Encrypted (Хранилище сертификатов Windows).
Предоставление приложениям и пользователям доступа к сертификатам
Если главный ключ столбца является сертификатом, хранящимся в расположении хранилища сертификатов на локальном компьютере , необходимо экспортировать сертификат с закрытым ключом и импортировать его на все компьютеры, где размещены приложения, которые будут шифровать или расшифровывать данные, хранящиеся в зашифрованных столбцах, или средства для настройки постоянного шифрования и для управления ключами постоянного шифрования. Кроме того, каждому пользователю должно быть предоставлено разрешение на чтение сертификата, хранящегося в расположении хранилища сертификатов на локальном компьютере, чтобы он мог использовать сертификат в качестве главного ключа столбца.
Если главный ключ столбца является сертификатом, хранящимся в расположении хранилища сертификатов под учетной записью текущего пользователя, необходимо экспортировать сертификат с закрытым ключом и импортировать его в расположение хранилища сертификатов текущего пользователя для всех учетных записей пользователей, работающих с приложениями, которые должны шифровать или расшифровывать данные в зашифрованных столбцах, или с инструментами для настройки и управления ключами постоянного шифрования (на всех машинах, содержащих эти приложения или инструменты). Настройка разрешений не требуется — после входа в систему пользователь может обращаться ко всем сертификатам в расположении хранилища сертификатов текущего пользователя.
Использование PowerShell
Используйте командлеты Import-PfxCertificate и Export-PfxCertificate для импорта и экспорта сертификата.
Использование консоли управления (MMC)
Чтобы предоставить пользователю разрешение на чтение сертификата, хранящегося в расположение хранилища сертификатов на локальном компьютере, выполните приведенные далее действия.
- Откройте окно командной строки и введите mmc.
- В консоли MMC в меню Файл выберите Добавить или удалить оснастку.
- В диалоговом окне Добавление или удаление оснастки нажмите кнопку Добавить.
- В диалоговом окне Добавление изолированной оснастки выберите Сертификаты, и нажмите Добавить.
- В диалоговом окне оснастки Сертификаты выберите Учетная запись компьютера и нажмите Готово.
- В диалоговом окне Добавление изолированной оснастки нажмите кнопку Закрыть.
- В диалоговом окне Добавление или удаление оснастки нажмите кнопку ОК.
- В оснастке "Сертификаты" найдите сертификат в папке "Сертификаты > Личные", щелкните правой кнопкой мыши по сертификату, наведите указатель на Все задачи и выберите пункт "Управление закрытыми ключами".
- В диалоговом окне Безопасность добавьте разрешение на чтение для учетной записи пользователя (если необходимо).
Создание главных ключей столбцов в хранилище ключей Azure
Azure Key Vault обеспечивает защиту ключей и секретов шифрования. Решение удобно для хранения главных ключей столбцов для Always Encrypted, особенно в том случае, если приложения размещены в Azure. Для создания ключа в хранилище ключей Azureнеобходимы подписка Azure и хранилище ключей Azure. Ключ может храниться в хранилище ключей или в управляемом модуле HSM. Допустимым главным ключом столбца считается ключ RSA, управляемый в Azure Key Vault.
Использование интерфейса командной строки Azure, портала Azure или PowerShell
Сведения о том, как создать ключ в хранилище ключей, см. в следующих руководствах:
- Краткое руководство. Настройка и извлечение ключа из Azure Key Vault с помощью Azure CLI
- Краткое руководство. Настройка и извлечение ключа из Azure Key Vault с помощью Azure PowerShell
- Краткое руководство: Настройка и получение ключа из Azure Key Vault с помощью портала Azure
Сведения о том, как создать ключ в управляемом модуле HSM, см. в следующей статье:
SQL Server Management Studio (SSMS)
Дополнительные сведения о том, как создать главный ключ столбца в хранилище ключей или в управляемом аппаратном модуле безопасности (HSM) в Azure Key Vault, см. в статье Подготовка к работе с ключами Always Encrypted с помощью SQL Server Management Studio. Пошаговое руководство по использованию SSMS и настройке хранения ключей Always Encrypted в хранилище ключей, см. в учебнике по использованию мастера Always Encrypted (для Azure Key Vault).
Предоставление приложениям и пользователям доступа к ключам в хранилище ключей Azure
Чтобы получить доступ к зашифрованному столбцу, приложение должно иметь доступ к Azure Key Vault, а также определенные разрешения для главного ключа столбца, чтобы расшифровать ключ шифрования столбцов, которым защищен столбец.
Чтобы управлять ключами Always Encrypted, необходимы разрешения на перечисление и создание главных ключей столбцов в Azure Key Vault, а также на выполнение операций шифрования с использованием ключей.
Хранилища ключей
Если вы храните главные ключи столбцов в хранилище ключей и используете разрешения ролей для авторизации:
Идентификатор приложения должен состоять в ролях, которые позволяют выполнять следующие действия на плоскости данных в хранилище ключей:
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/verify/action
Самый простой способ предоставить приложению требуемое разрешение — добавить его удостоверение в роль пользователя шифрования для хранилища ключей. Можно также создать настраиваемую роль с необходимыми разрешениями.
Пользователь, управляющий ключами Always Encrypted, должен быть участником или ролей, которым разрешено выполнять следующие действия управления данными в хранилище ключей:
- Microsoft.KeyVault/vaults/keys/create/action;
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/encrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/sign/action
- Microsoft.KeyVault/vaults/keys/verify/action
Самый простой способ предоставить пользователю необходимое разрешение — это добавить его в роль Key Vault Crypto User. Можно также создать настраиваемую роль с необходимыми разрешениями.
Если вы храните главные ключи столбцов в хранилище ключей и используете политики доступа для авторизации.
- Идентификатору вашего приложения требуются следующие разрешения политики доступа к хранилищу ключей: get, unwrapKey и verify.
- Пользователю, управляющему ключами Always Encrypted, требуются следующие разрешения политики доступа для хранилища ключей: create, get, list, sign, unwrapKey, wrapKey, verify.
Общие сведения о том, как настроить проверку подлинности и авторизацию для хранилищ ключей, см. в разделе Авторизация доступа к Key Vault для субъекта безопасности.
Управляемые модули HSM
Идентификатор вашего приложения должен быть участником ролей, которые позволяют выполнять следующие действия с плоскостью данных в управляемом модуле безопасности HSM:
- Microsoft.KeyVault/managedHsm/keys/decrypt/action;
- Microsoft.KeyVault/managedHsm/keys/read/action;
- Microsoft.KeyVault/managedHsm/keys/verify/action.
Рекомендуем создать настраиваемую роль, содержащую только вышеуказанные разрешения.
Пользователь, управляющий ключами Always Encrypted, должен быть участником ролей, которым разрешено выполнять следующие действия уровня данных с ключом:
- Microsoft.KeyVault/managedHsm/keys/create/action;
- Microsoft.KeyVault/managedHsm/keys/decrypt/action;
- Microsoft.KeyVault/managedHsm/keys/encrypt/action;
- Microsoft.KeyVault/managedHsm/keys/read;
- Microsoft.KeyVault/managedHsm/keys/sign/action (подпись/действие)
- Microsoft.KeyVault/managedHsm/keys/verify/action.
Самый простой способ предоставить пользователю указанные выше разрешения — добавить его к роли пользователя шифрования для управляемого модуля HSM. Можно также создать настраиваемую роль с необходимыми разрешениями.
Дополнительные сведения об управлении доступом к управляемым модулям HSM см. в следующих статьях:
Создание главных ключей столбцов в аппаратных модулях безопасности с помощью CNG
Главный ключ столбца для функции Always Encrypted может храниться в хранилище ключей, реализующем API криптографии следующего поколения (CNG). Как правило, этот тип хранилища является аппаратным модулем безопасности (HSM). HSM — это физическое устройство, которое защищает цифровые ключи и управляет ими, а также обеспечивает обработку шифрования. Аппаратные модули безопасности традиционно имеют вид подключаемой платы или внешнего устройства, напрямую подключаемого к компьютеру (локальный HSM) или сетевому серверу.
Чтобы модуль HSM был доступен для приложений на данном компьютере, на компьютере должен быть установлен и настроен поставщик хранилища ключей (KSP), реализующий CNG. Клиентский драйвер с постоянным шифрованием (поставщик хранилища главных ключей столбцов в драйвере) использует KSP для шифрования и расшифровки ключей шифрования столбцов, защищенных главным ключом столбца, который хранится в хранилище ключей.
В состав Windows входит поставщик хранилища ключей Microsoft Software Key Storage Provider — программный KSP, который можно использовать для тестовых целей. См. раздел CNG Key Storage Providers(Поставщики хранилища ключей CNG).
Создание главных ключей столбцов в хранилище ключей с помощью CNG или KSP
Главный ключ столбца должен быть асимметричным ключом (парой открытого и закрытого ключей), использующим алгоритм RSA. Рекомендуемая длина ключа — 2048 или больше.
Использование HSM-специфических инструментов
Обратитесь к документации вашего аппаратного модуля безопасности.
Использование PowerShell
Для создания ключа в хранилище ключей с помощью CNG в PowerShell можно использовать API-интерфейсы .NET.
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
Использование среды SQL Server Management Studio
См. Настройка ключей Always Encrypted с помощью SQL Server Management Studio.
Предоставление приложениям и пользователям доступа к ключам CNG
Сведения о настройке KSP на компьютере и предоставлении приложениям и пользователям доступа к HSM см. в документации по HSM и KSP.
Создание главных ключей столбцов в аппаратных модулях безопасности с помощью CAPI
Главный ключ столбца для постоянного шифрования может храниться в хранилище ключей, реализующем API криптографии (CAPI). Как правило, такое хранилище представляет собой аппаратный модуль безопасности (HSM) — физическое устройство, которое защищает цифровые ключи и управляет ими, а также обеспечивает обработку шифрования. Аппаратные модули безопасности традиционно имеют вид подключаемой платы или внешнего устройства, напрямую подключаемого к компьютеру (локальный HSM) или сетевому серверу.
Чтобы модуль HSM был доступен для приложений на данном компьютере, на компьютере должен быть установлен и настроен поставщик служб шифрования (CSP), реализующий CAPI. Клиентский драйвер с постоянным шифрованием (поставщик хранилища главных ключей столбцов в драйвере) использует CSP для шифрования и расшифровки ключей шифрования столбцов, защищенных главным ключом столбца, который хранится в хранилище ключей.
Примечание.
CAPI — это устаревший API, который не рекомендуется использовать. Если для вашего модуля HSM доступен поставщик KSP, следует использовать именно его, а не CSP или CAPI.
CSP должен поддерживать алгоритм RSA для использования с функцией Always Encrypted.
В состав Windows входят следующие программные (не поддерживаемые модулем HSM) поставщики CSP, которые поддерживают RSA и могут использоваться в целях тестирования: Microsoft Enhanced RSA и AES Cryptographic Provider.
Создание главных ключей столбцов в хранилище ключей с помощью CAPI или CSP
Главный ключ столбца должен быть асимметричным ключом (парой открытого и закрытого ключей), использующим алгоритм RSA. Рекомендуемая длина ключа — 2048 или больше.
Использование HSM-специфических инструментов
Обратитесь к документации вашего аппаратного модуля безопасности.
Использование среды SQL Server Management Studio (SSMS)
См. Настройка ключей Always Encrypted с помощью SQL Server Management Studio.
Предоставление приложениям и пользователям доступа к ключам CNG
Сведения о настройке CSP на компьютере и предоставлении приложениям и пользователям доступа к HSM см. в документации по HSM и CSP.
Следующие шаги
- Настройка ключей Always Encrypted с помощью SQL Server Management Studio
- Подготовка ключей Always Encrypted с помощью PowerShell