Поделиться через


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>]
   [-AllowVerboseLogging]
   [-InputObject] <Database>
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [<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>]
   [-AllowVerboseLogging]
   [[-Path] <String>]
   [-Script]
   [-AccessToken <PSObject>]
   [-TrustServerCertificate]
   [-HostNameInCertificate <String>]
   [-Encrypt <String>]
   [-ProgressAction <ActionPreference>]
   [<CommonParameters>]

Описание

Командлет Set-SqlColumnEncryption шифрует, расшифровывает или повторно шифрует указанные столбцы базы данных с помощью функции Always Encrypted.

Командлет принимает массив объектов SqlColumnEncryptionSettings, каждый из которых задает конфигурацию целевого шифрования для одного столбца в базе данных.

Командлет шифрует, расшифровывает или повторно шифрует каждый указанный столбец в зависимости от текущей конфигурации шифрования столбца и указанных параметров целевого шифрования.

Командлет взаимодействует с хранилищами ключей, включающих главные ключи столбцов. Если любой главный ключ столбца, защищающий столбцы для шифрования, расшифровки или повторно зашифрованного, хранится в 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 будет оставаться недоступной для обновлений во время операции. Предположим, что главный ключ столбца, защищенный 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. Применение указанных параметров целевого шифрования к трем столбцам базы данных (главный ключ столбца хранится в Azure Key Vault).)

Этот пример аналогичен приведенному выше. Единственное различие заключается в том, что главный ключ столбца, защищенный 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.) Предположим, что главный ключ столбца, защита 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 модуля.

Тип:PSObject
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-AllowVerboseLogging

Если задано, командлет добавит подробные сообщения в файл журнала (если задан параметр LogFileDirectory) и сохранит файлы dacpac, используемые базовыми библиотеками для выполнения операции.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ColumnEncryptionSettings

Задает массив объектов SqlColumnEncryptionSettings, каждый из которых задает конфигурацию целевого шифрования для одного столбца в базе данных.

Тип:SqlColumnEncryptionSettings[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-EnclaveAttestationProtocol

Указывает протокол аттестации анклава для Always Encrypted с безопасными анклавами. Этот параметр необходим для выполнения криптографических операций на месте в защищенном анклаве на стороне сервера, чтобы пустить расходы на скачивание и отправку данных. Обратите внимание, что шифрование на месте имеет другие предварительные требования: база данных должна иметь настроенный анклав, и необходимо использовать криптографические ключи с поддержкой анклава.

Тип:SqlConnectionAttestationProtocol
Aliases:AttestationProtocol
Допустимые значения:NotSpecified, AAS, None, HGS
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-EnclaveAttestationURL

Задает URL-адрес аттестации анклава для шифрования на месте при использовании Always Encrypted с безопасными анклавами. Требуется, если EnclaveAttestationProtocol имеет значение AAS или HGS.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Encrypt

Тип шифрования, используемый при подключении к SQL Server.

Это значение сопоставляется со свойством EncryptSqlConnectionEncryptOption в объекте SqlConnection драйвера Microsoft.Data.SqlClient.

В версии 22 модуля по умолчанию используется Optional (для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет "Обязательный", которое может создать критическое изменение для существующих скриптов.

Этот параметр является новым в версии 22 модуля.

Тип:String
Допустимые значения:Mandatory, Optional, Strict
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-HostNameInCertificate

Имя узла, используемое при проверке TLS/SSL-сертификата SQL Server. Этот параметр необходимо передать, если экземпляр SQL Server включен для принудительного шифрования и требуется подключиться к экземпляру с помощью имени узла или короткого имени. Если этот параметр опущен, передача полного доменного имени (FQDN) в -ServerInstance необходима для подключения к экземпляру SQL Server, включенного для принудительного шифрования.

Этот параметр является новым в версии 22 модуля.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-InputObject

Указывает объект базы данных SQL, для которого этот командлет выполняет операцию.

Тип:Database
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-KeepCheckForeignKeyConstraints

Если задано, сохраняется семантика проверки (CHECK или NOCHECK) ограничений внешнего ключа.

В противном случае, если не задано, а если UseOnlineApproach не задано, ограничения внешнего ключа всегда повторно создаются с помощью параметра NOCHECK, чтобы свести к минимуму влияние на приложения.

KeepCheckForeignKeyConstraints действителен только в том случае, если задан параметр UseOnlineApproach.

При автономном подходе семантика ограничений внешнего ключа всегда сохраняется.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-KeyVaultAccessToken

Указывает маркер доступа для хранилищ ключей в Azure Key Vault. Используйте этот параметр, если любой из главных ключей столбцов, защищающих столбцы для шифрования, расшифровки или повторного шифрования, хранится в хранилищах ключей в Azure Key Vault.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LockTimeoutInSeconds

Указывает максимальное время (в секундах) командлет будет ожидать блокировки базы данных, необходимые для начала последней итерации. Значение -1 (по умолчанию) не указывает период ожидания (т. е. ожидание навсегда). Значение 0 означает, что не ждать вообще. Когда ожидание блокировки превышает значение времени ожидания, возвращается ошибка. Допустимо, только если задан UseOnlineApproach.

Тип:Int32
Position:Named
Default value:-1
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LogFileDirectory

Если задано, командлет создаст файл журнала в указанном каталоге.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ManagedHsmAccessToken

Указывает маркер доступа для управляемых HSM в Azure Key Vault. Используйте этот параметр, если любой из главных ключей столбцов, защищающих столбцы для шифрования, расшифровки или повторного шифрования, хранится в управляемых HSM в Azure Key Vault.

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-MaxDivergingIterations

Указывает максимальное число последовательных итерации последовательного перехвата, где увеличивается число обработанных строк. По достижении этого ограничения командлет предполагает, что он не сможет догнать изменения, внесенные в исходную таблицу, и он прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан UseOnlineApproach. Должно быть меньше значения MaxIterations.

Тип:Int32
Position:Named
Default value:5
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-MaxDowntimeInSeconds

Указывает максимальное время (в секундах), в течение которого исходная таблица не будет доступна для операций чтения и записи. Допустимо, только если задан UseOnlineApproach.

Тип:Int32
Position:Named
Default value:1800
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-MaxIterationDurationInDays

Указывает максимальное время (в днях) заполнения или одно итерацию перехвата. Если начальная или любая итерация перехвата занимает больше указанного значения, командлет прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан UseOnlineApproach.

Тип:Int32
Position:Named
Default value:3
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-MaxIterations

Указывает максимальное количество итерации на этапе перехвата. По достижении этого ограничения командлет прерывает операцию и повторно создает исходное состояние базы данных. Допустимо, только если задан UseOnlineApproach.

Тип:Int32
Position:Named
Default value:100
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Path

Указывает путь к базе данных SQL, для которой этот командлет выполняет операцию. Если значение этого параметра не указано, командлет использует текущее рабочее расположение.

Тип:String
Position:1
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ProgressAction

Определяет, как PowerShell реагирует на обновления хода выполнения, созданные скриптом, командлетом или поставщиком, например индикаторами хода выполнения, созданными командлетом Write-Progress. Командлет Write-Progress создает индикаторы хода выполнения, показывающие состояние команды.

Тип:ActionPreference
Aliases:proga
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Script

Указывает, что этот командлет возвращает скрипт Transact-SQL, выполняющий задачу, выполняемую этим командлетом.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-TrustServerCertificate

Указывает, будет ли канал зашифрован при обходе цепочки сертификатов для проверки доверия.

В версии 22 модуля по умолчанию используется $true (для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет иметь значение "$false", которое может создать критическое изменение для существующих скриптов.

Этот параметр является новым в версии 22 модуля.

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-UseOnlineApproach

Если задано, командлет будет использовать интерактивный подход, чтобы обеспечить доступность базы данных для других приложений для чтения и записи в течение большей части времени операции.

В противном случае командлет заблокирует затронутые таблицы, что делает их недоступными для обновлений для всей операции. Таблицы будут доступны для чтения.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

Microsoft.SqlServer.Management.Smo.Database

Выходные данные

String