Set-SqlColumnEncryption
Шифрует, расшифровывает или повторно шифрует указанные столбцы в базе данных.
Синтаксис
Set-SqlColumnEncryption
-ColumnEncryptionSettings <SqlColumnEncryptionSettings[]>
[-UseOnlineApproach]
[-KeepCheckForeignKeyConstraints]
[-MaxDowntimeInSeconds <Int32>]
[-KeyVaultAccessToken <String>]
[-ManagedHsmAccessToken <String>]
[-LockTimeoutInSeconds <Int32>]
[-MaxIterationDurationInDays <Int32>]
[-MaxDivergingIterations <Int32>]
[-MaxIterations <Int32>]
[-EnclaveAttestationProtocol <SqlConnectionAttestationProtocol>]
[-EnclaveAttestationURL <String>]
[-LogFileDirectory <String>]
[-InputObject] <Database>
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Set-SqlColumnEncryption
-ColumnEncryptionSettings <SqlColumnEncryptionSettings[]>
[-UseOnlineApproach]
[-KeepCheckForeignKeyConstraints]
[-MaxDowntimeInSeconds <Int32>]
[-KeyVaultAccessToken <String>]
[-ManagedHsmAccessToken <String>]
[-LockTimeoutInSeconds <Int32>]
[-MaxIterationDurationInDays <Int32>]
[-MaxDivergingIterations <Int32>]
[-MaxIterations <Int32>]
[-EnclaveAttestationProtocol <SqlConnectionAttestationProtocol>]
[-EnclaveAttestationURL <String>]
[-LogFileDirectory <String>]
[[-Path] <String>]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Описание
Командлет Set-SqlColumnEncryption шифрует, расшифровывает или повторно шифрует указанные столбцы базы данных с помощью функции Always Encrypted.
Командлет принимает массив объектов SqlColumnEncryptionSettings , каждый из которых задает целевую конфигурацию шифрования для одного столбца в базе данных.
Командлет будет шифровать, расшифровывать или повторно шифровать каждый указанный столбец в зависимости от текущей конфигурации шифрования столбца и заданных целевых параметров шифрования.
Командлет взаимодействует с хранилищами ключей, которые содержат столбцы master ключи. Если какой-либо столбец, master ключ, защищающий столбцы для шифрования, расшифровки или повторного шифрования, хранится в Azure, необходимо указать допустимый маркер проверки подлинности для хранилища ключей или управляемого модуля HSM, включающего ключ. Кроме того, перед вызовом этого командлета можно пройти проверку подлинности в Azure с помощью Add-SqlAzureAuthenticationContext .
Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.
Примеры
Пример 1. Применение указанных целевых параметров шифрования к трем столбцам базы данных.
В этом примере dbo.Student.Id
столбец шифруется с помощью детерминированного шифрования и ключа шифрования столбца с именем MyCEK
.
Столбец dbo.Student.LastName
шифруется с помощью случайного шифрования и ключа шифрования столбца с именем MyCEK
.
Столбец dbo.StudentFirstName
не шифруется (если столбец изначально зашифрован, он расшифровывается).
В примере используется автономный подход, что означает, что таблица Student будет оставаться недоступной для обновлений на протяжении всей операции.
Предположим, что столбец master ключ, защищающий MyCEK
, не хранится в Azure Key Vault.
$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id' -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName' -EncryptionType 'Randomized' -EncryptionKey 'MyCek'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory .
Пример 2. Применение указанных целевых параметров шифрования к трем столбцам базы данных (столбец master ключ хранится в Azure Key Vault).
Этот пример аналогичен приведенному выше; Единственное отличие заключается в том, что столбец master защиты MyCEK
ключа хранится в Azure Key Vault.
# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount
# Obtain an access token for key vaults.
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token
$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id' -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName' -EncryptionType 'Randomized' -EncryptionKey 'MyCek'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'
# Pass the token to the cmdlet. It will use the token to communicate with Azure Key Vault to obtain the plaintext value of the column encryption key.
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory . -KeyVaultAccessToken $keyVaultAccessToken
Пример 3. Применение указанных параметров целевого шифрования к трем столбцам базы данных с помощью интерактивного подхода.
В этом примере Student
таблица будет недоступна для операций чтения и записи в течение 30 секунд (значение, указанное с помощью параметра MaxDowntimeInSeconds). Предположим, что столбец master ключ, защищающий MyCEK
, хранится за пределами Azure (передача маркера Azure не требуется).
$ces1 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.Id' -EncryptionType 'Deterministic' -EncryptionKey 'MyCek'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.LastName' -EncryptionType 'Randomized' -EncryptionKey 'MyCek'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName 'dbo.Student.FirstName' -EncryptionType 'Plaintext'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -UseOnlineApproach -MaxDowntimeInSeconds 30 -LogFileDirectory .
Пример 4. Применение целевых параметров шифрования к нескольким столбцам с помощью шифрования на месте.
$ces1 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.Id -EncryptionType 'Randomized' -EncryptionKey 'CEK1'
$ces2 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.LastName -EncryptionType 'Randomized' -EncryptionKey 'CEK1'
$ces3 = New-SqlColumnEncryptionSettings -ColumnName dbo.Student.FirstName -EncryptionType 'Randomized' -EncryptionKey 'CEK1'
Set-SqlColumnEncryption -ColumnEncryptionSettings $ces1,$ces2,$ces3 -LogFileDirectory . -EnclaveAttestationProtocol 'AAS' -EnclaveAttestationURL 'https://enclavedemoattest.weu.attest.azure.net'
В этом примере параметры целевого шифрования применяются к столбцам базы данных с использованием шифрования на месте при условии выполнения всех предварительных требований для шифрования на месте, то есть в базе данных включен анклав, а ключи, используемые в криптографических операциях, активируются командлетом.
Параметры
-AccessToken
Маркер доступа, используемый для проверки подлинности для SQL Server в качестве альтернативы проверке подлинности пользователя или пароля или проверки подлинности Windows.
Это можно использовать, например, для подключения к SQL Azure DB
и SQL Azure Managed Instance
с помощью Service Principal
или Managed Identity
.
Используемый параметр может быть строкой, представляющей маркер, или объектом, PSAccessToken
возвращенным при выполнении .Get-AzAccessToken -ResourceUrl https://database.windows.net
Этот параметр является новым в версии 22 модуля.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ColumnEncryptionSettings
Задает массив объектов SqlColumnEncryptionSettings , каждый из которых задает целевую конфигурацию шифрования для одного столбца в базе данных.
Type: | SqlColumnEncryptionSettings[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-EnclaveAttestationProtocol
Указывает протокол аттестации анклава для Always Encrypted с безопасными анклавами. Этот параметр необходим командлету для выполнения криптографических операций на месте в защищенном анклаве на стороне сервера, чтобы отменить расходы на загрузку и отправку данных. Обратите внимание, что шифрование на месте имеет другие предварительные требования: база данных должна иметь настроенный анклав и использовать криптографические ключи с поддержкой анклава.
Type: | SqlConnectionAttestationProtocol |
Aliases: | AttestationProtocol |
Accepted values: | NotSpecified, AAS, None, HGS |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-EnclaveAttestationURL
Указывает URL-адрес аттестации анклава для шифрования на месте при использовании Always Encrypted с безопасными анклавами. Требуется, если enclaveAttestationProtocol имеет значение AAS
или HGS
.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
Тип шифрования, используемый при подключении к SQL Server.
Это значение сопоставляется со свойством Encrypt
SqlConnectionEncryptOption
объекта SqlConnection драйвера Microsoft.Data.SqlClient.
В версии 22 модуля по умолчанию используется Optional
значение (для совместимости с версией 21). В версии 23+ модуля значением по умолчанию будет "Обязательно", что может привести к критическому изменению для существующих скриптов.
Этот параметр является новым в версии 22 модуля.
Type: | String |
Accepted values: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostNameInCertificate
Имя узла используется для проверки TLS/SSL-сертификата SQL Server. Этот параметр необходимо передать, если экземпляр SQL Server включен для принудительного шифрования и вы хотите подключиться к экземпляру с помощью hostname/shortname. Если этот параметр опущен, для подключения к экземпляру SQL Server, включенного для принудительного шифрования, необходимо передать полное доменное имя (FQDN) в параметр -ServerInstance.
Этот параметр является новым в версии 22 модуля.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Указывает объект базы данных SQL, для которого этот командлет выполняет операцию.
Type: | Database |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-KeepCheckForeignKeyConstraints
Если этот параметр задан, проверка семантика (CHECK или NOCHECK) ограничений внешнего ключа сохраняется.
В противном случае, если не задано и если параметр UseOnlineApproach не задан, ограничения внешнего ключа всегда повторно создаются с параметром NOCHECK, чтобы свести к минимуму влияние на приложения.
Параметр KeepCheckForeignKeyConstraints действителен, только если задан параметр UseOnlineApproach.
При автономном подходе семантика ограничений внешнего ключа всегда сохраняется.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-KeyVaultAccessToken
Указывает маркер доступа для хранилищ ключей в Azure Key Vault. Используйте этот параметр, если какой-либо из ключей столбцов master, защищающих столбцы для шифрования, расшифровки или повторного шифрования, хранятся в хранилищах ключей в Azure Key Vault.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LockTimeoutInSeconds
Указывает максимальное время (в секундах) командлет будет ожидать блокировки базы данных, необходимые для начала последней догоняющей итерации. Значение -1 (по умолчанию) указывает на отсутствие периода ожидания (то есть время ожидания). Значение 0 означает, что вовсе не нужно ждать. Когда ожидание блокировки превышает значение времени ожидания, возвращается ошибка. Допустимо, только если задан параметр UseOnlineApproach .
Type: | Int32 |
Position: | Named |
Default value: | -1 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LogFileDirectory
Если этот параметр задан, командлет создаст файл журнала в указанном каталоге.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ManagedHsmAccessToken
Указывает маркер доступа для управляемых модулей HSM в Azure Key Vault. Используйте этот параметр, если какой-либо из ключей столбцов master, защищающих столбцы, которые необходимо зашифровать, расшифровать или повторно зашифровать, хранятся в управляемых модулях HSM в Azure Key Vault.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxDivergingIterations
Задает максимальное число последовательных итераций догоняющего уровня, в которых увеличивается количество обработанных строк. Когда это ограничение достигнуто, командлет предполагает, что он не сможет выполнить изменения, внесенные в исходную таблицу, и прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан параметр UseOnlineApproach . Должно быть меньше значения MaxIterations.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxDowntimeInSeconds
Задает максимальное время (в секундах), в течение которого исходная таблица будет недоступна для операций чтения и записи. Допустимо, только если задан параметр UseOnlineApproach .
Type: | Int32 |
Position: | Named |
Default value: | 1800 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxIterationDurationInDays
Указывает максимальное время (в днях) заполнения или одну итерацию с догоняющим. Если для заполнения или любой догоняющей итерации требуется больше указанного значения, командлет прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан параметр UseOnlineApproach .
Type: | Int32 |
Position: | Named |
Default value: | 3 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxIterations
Задает максимальное количество итераций на этапе доверстного развития. По достижении этого ограничения командлет прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан параметр UseOnlineApproach .
Type: | Int32 |
Position: | Named |
Default value: | 100 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Указывает путь к базе данных SQL, для которой этот командлет выполняет операцию. Если значение этого параметра не указано, командлет использует текущее рабочее расположение.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Script
Указывает, что этот командлет возвращает скрипт Transact-SQL, который выполняет задачу, выполняемую этим командлетом.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
Указывает, будет ли канал зашифрован при обходе цепочки сертификатов для проверки доверия.
В версии 22 модуля по умолчанию используется $true
значение (для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет "$false", что может привести к критическому изменению для существующих скриптов.
Этот параметр является новым в версии 22 модуля.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseOnlineApproach
Если этот параметр задан, командлет будет использовать интерактивный подход, чтобы обеспечить доступность базы данных для других приложений для операций чтения и записи в течение большей части времени операции.
В противном случае командлет заблокирует затронутые таблицы, делая их недоступными для обновлений в течение всей операции. Таблицы будут доступны для операций чтения.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Microsoft.SqlServer.Management.Smo.Database
Выходные данные
String