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.

Это значение сопоставляется со свойством EncryptSqlConnectionEncryptOption объекта 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