Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2019 (15.x) и более поздних версий — только для Windows
База данных SQL Azure
В этой статье описывается создание ключей с поддержкой анклавов, которые позволяют выполнять вычисления в анклавах на стороне сервера, используемых для Always Encrypted с безопасными анклавами.
При настройке ключей с поддержкой анклава применяются общие рекомендации и процессы для управления ключами Always Encrypted. В этой статье приводятся конкретные сведения, касающиеся функции Always Encrypted с безопасными анклавами.
Для подготовки главного ключа столбца с поддержкой анклава с помощью SQL Server Management Studio или PowerShell требуется, чтобы новый ключ поддерживал вычисления анклава. В результате этого средство (SSMS или PowerShell) сгенерирует выражение CREATE COLUMN MASTER KEY
, которое установит ENCLAVE_COMPUTATIONS
в метаданных столбцов главного ключа в базе данных. Дополнительные сведения см. в статье CREATE COLUMN MASTER KEY (Transact-SQL).
Инструмент также добавит цифровую подпись свойств главного столбца с использованием главного ключа столбца и сохранит эту подпись в метаданных базы данных. Эта подпись предотвращает вредоносное изменение параметра ENCLAVE_COMPUTATIONS
. Драйверы клиента SQL проверяют подписи, прежде чем разрешить использование анклава. Это позволяет администраторам безопасности контролировать, какие данные столбцов могут быть вычислены внутри анклава.
Свойство ENCLAVE_COMPUTATIONS
является неизменяемым — вы не сможете изменить его после определения главного ключа столбца в метаданных. Чтобы включить вычисления анклава с использованием ключа шифрования столбца, шифруемого данным главным ключом столбца, необходимо сначала выполнить ротацию главного ключа столбца и заменить его на главный ключ столбца с поддержкой анклава. См. статью Смена ключей с поддержкой анклава.
Примечание.
В настоящее время SSMS и PowerShell поддерживают главные ключи столбцов с поддержкой анклава, хранящиеся в Azure Key Vault или хранилище сертификатов Windows. Аппаратные модули безопасности (использующие CNG или CAPI) не поддерживаются.
Чтобы создать ключ шифрования столбца с поддержкой анклава, необходимо сначала выбрать главный ключ столбца с поддержкой анклава для шифрования нового ключа.
В следующих разделах содержатся более подробные сведения о создании ключей, поддерживающих анклав, с помощью SSMS и PowerShell.
Настройка ключей с поддержкой анклава с помощью SQL Server Management Studio
В SQL Server Management Studio можно настроить следующие ресурсы.
- Главный ключ столбца с возможностью использования анклава в диалоговом окне Новый главный ключ столбца.
- Ключ шифрования столбца с поддержкой анклава, созданный в диалоговом окне Новый ключ шифрования столбца.
Мастер Always Encrypted также позволяет создать главный ключ столбца с поддержкой анклава и ключ шифрования столбцов с поддержкой анклава.
Убедитесь, что установлена последняя общедоступная версия SQL Server Management Studio (SSMS).
Провизирование главных ключей столбцов с поддержкой анклавов с помощью диалогового окна "Новый главный ключ столбца"
Чтобы создать столбцовый мастер-ключ с поддержкой анклава, выполните шаги, описанные в Создание столбцовых мастер-ключей с помощью диалогового окна "Новый столбцовый ключ". Убедитесь, что выбрали Разрешить вычисления анклава. См. снимок экрана ниже.
Примечание.
Флажок Разрешить вычисления анклава отображается только в случае, если для базы данных настроен безопасный анклав. Если вы используете SQL Server, см. статью "Настройка безопасного анклава в SQL Server". Если вы используете Azure SQL Database, см. раздел Enable Always Encrypted с безопасными анклавами для базы данных Azure SQL.
Совет
Чтобы проверить, поддерживает ли главный ключ столбца анклав, щелкните его правой кнопкой мыши в обозревателе объектов и выберите пункт Свойства. Если ключ поддерживает анклав, вычисления в анклаве: разрешено отображается в окне со свойствами ключа. Кроме того, можно использовать представление sys.column_master_keys (Transact-SQL).
Настройка ключей шифрования столбцов с поддержкой анклава с помощью диалогового окна "Новый ключ шифрования столбца"
Чтобы подготовить ключ шифрования столбца с поддержкой анклава, выполните действия, описанные в разделе Подготовка ключей шифрования столбцов с помощью диалогового окна "Новый ключ шифрования столбца". При выборе главного ключа столбца убедитесь, что он поддерживает работу с анклавами.
Совет
Чтобы проверить, поддерживает ли ключ шифрования столбца анклав, щелкните его правой кнопкой мыши в обозревателе объектов и выберите пункт Свойства. Если ключ поддерживает анклав, вычисления в анклаве: разрешено отображается в окне со свойствами ключа.
Настройка ключей, которые поддерживают анклав, с помощью PowerShell
Чтобы подготовить ключи с поддержкой анклава с помощью PowerShell, вам потребуется модуль SqlServer PowerShell версии 22 или более поздней.
Как правило, рабочие процессы подготовки ключей PowerShell (с разделением ролей и без него) для Always Encrypted, описанные в статье Подготовка ключей Always Encrypted с помощью PowerShell, также применимы и к ключам с поддержкой анклавов. В этом разделе приводятся конкретные сведения, касающиеся ключей, поддерживающих анклав.
Модуль SqlServer PowerShell расширяет командлеты New-SqlCertificateStoreColumnMasterKeySettings и New-SqlAzureKeyVaultColumnMasterKeySettings через параметр -AllowEnclaveComputations
, позволяя указывать столбцовый мастер-ключ с поддержкой анклава во время процесса конфигурации. Каждый командлет создает локальный объект, содержащий свойства главного ключа столбца (хранящегося в Azure Key Vault или в хранилище сертификатов Windows). Если указано, свойство -AllowEnclaveComputations
помечает ключ как поддерживающий работу анклавов в локальном объекте. Кроме того, командлет обращается к указанному главному ключу столбца (в Azure Key Vault или хранилище сертификатов Windows) для добавления цифровой подписи к свойствам ключа. Созданный объект настроек для нового главного ключа столбца, поддерживающего анклав, можно использовать в последующем использовании командлета New-SqlColumnMasterKey для создания объекта метаданных, описывающего новый ключ в базе данных.
Ключи шифрования столбцов, включенные в анклав, ничем не отличаются от ключей шифрования столбцов, не поддерживающих анклав. Необходимо просто убедиться, что главный ключ столбца, который используется для шифрования нового ключа шифрования столбца, имеет поддержку анклава.
Примечание.
Сейчас модуль SqlServer PowerShell не поддерживает подготовку ключей с поддержкой анклава, хранящихся в аппаратных модулях безопасности (использующих CNG или CAPI).
Пример: настройка ключей с поддержкой анклава с помощью хранилища сертификатов Windows
В приведенном ниже законченном примере показана подготовка ключей с поддержкой анклавов с сохранением основного ключа столбца, который хранится в хранилище сертификатов Windows. В основе сценария лежит пример из раздела Хранилище сертификатов Windows без разделения ролей (пример). Обратите внимание на использование параметра -AllowEnclaveComputations
в командлете New-SqlCertificateStoreColumnMasterKeySettings — это единственное различие между рабочими процессами в двух примерах.
# Create a column master key in Windows Certificate Store.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange
# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Create a SqlColumnMasterKeySettings object for your column master key
# using the -AllowEnclaveComputations parameter.
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint -AllowEnclaveComputations
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName
Пример: создание ключей с поддержкой анклавов с помощью Azure Key Vault
В нижеприведенном развернутом примере показано, как предоставлять ключи с поддержкой анклава и хранить главный ключ столбца в хранилище ключей службы Azure Key Vault. В основе сценария лежит пример из раздела Azure Key Vault без разделения ролей (пример). Важно отметить два различия между рабочими процессами для ключей с поддержкой анклавов и ключей без такой поддержки.
- В приведенном ниже сценарии командлет New-SqlCertificateStoreColumnMasterKeySettings использует параметр
-AllowEnclaveComputations
для создания нового главного ключа столбца с поддержкой анклава. - Приведенный ниже скрипт использует командлет Get-AzAccessToken для получения токена доступа для хранилищ ключей. Это необходимо, потому что New-SqlAzureKeyVaultColumnMasterKeySettings должен иметь доступ к Azure Key Vault для подписывания свойств главного ключа столбца.
# Create a column master key in Azure Key Vault.
Import-Module "SqlServer" -MinimumVersion 22.0.50
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzResourceGroup -Name $resourceGroup -Location $azureLocation # Creates a new resource group - skip, if your desired group already exists.
New-AzKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"
# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
# Change the authentication method in the connection string, if needed.
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True; TrustServerCertificate = True"
$database = Get-SqlDatabase -ConnectionString $connStr
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
# Create a SqlColumnMasterKeySettings object for your column master key.
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID -AllowEnclaveComputations -KeyVaultAccessToken $keyVaultAccessToken
# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings
# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database.
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -KeyVaultAccessToken $keyVaultAccessToken
Следующие шаги
- Выполнение инструкций Transact-SQL с помощью безопасных анклавов
- Настройка шифрования столбцов в существующем виде с помощью Always Encrypted с безопасными анклавами
- Включите Always Encrypted с безопасными анклавами для существующих зашифрованных столбцов
- Разрабатывайте приложения с использованием технологии Always Encrypted и защищенных анклавов