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