Configure Always Encrypted using PowerShell

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

Модуль SqlServer PowerShell предоставляет командлеты для настройки Always Encrypted в базе данных SQL Azure или SQL Server.

Вопросы безопасности при использовании PowerShell для настройки Always Encrypted

Так как основной задачей функции постоянного шифрования является обеспечение целостности зашифрованных конфиденциальных данных даже в случае нарушения безопасности системы базы данных, выполнение скрипта PowerShell, обрабатывающего ключи или конфиденциальные данные на сервере SQL Server, может снизить или вообще отменить эффект действия функции. Дополнительные рекомендации по безопасности см. в разделе Security Considerations for Key Management(Вопросы безопасности для управления ключами).

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

Дополнительные рекомендации по безопасности см. в разделе Security Considerations for Key Management(Вопросы безопасности для управления ключами).

Предварительные условия

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

Импорт модуля SqlServer

Загрузка модуля SqlServer

  1. Чтобы установить соответствующую политику выполнения скриптов, используйте командлет Set-ExecutionPolicy .
  2. Для импорта модуля SqlServer используйте командлет Import-Module .

В этом примере показана загрузка модуля SqlServer.

# Import the SQL Server Module.  
Import-Module "SqlServer" -MinimumVersion 22.0.50

Подключение к базе данных

Некоторые командлеты постоянного шифрования работают с данными или метаданными в базе данных и требуют сначала выполнить соединение с базой данных. При настройке постоянного шифрования с помощью модуля SqlServer подключиться к базе данных можно двумя рекомендуемыми способами:

  1. Подключение с помощью командлета Get-SqlDatabase.
  2. Подключение с помощью поставщика SQL Server PowerShell.

Использование Get-SqlDatabase

Командлет Get-SqlDatabase позволяет подключиться к базе данных в SQL Server или в базе данных SQL Azure. Он возвращает объект базы данных, который затем можно передать с помощью параметра InputObject командлета, который подключается к базе данных.

Использование SQL Server PowerShell

# Import the SqlServer module
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database
# Set the valid server name, database name and authentication keywords in the connection string
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$database = Get-SqlDatabase -ConnectionString $connStr

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

Кроме того, можно применить перенаправление:

$database | Get-SqlColumnMasterKey

Использование поставщика SQL Server PowerShell

Поставщик SQL Server PowerShell отображает иерархию объектов SQL Server в виде путей, похожих на пути файловой системы. Используя SQL Server PowerShell, вы можете переходить по путям с помощью псевдонимов Windows PowerShell по аналогии с переходом по путям файловой системы с помощью команд. После перехода к целевому экземпляру и базе данных последующие командлеты будут использоваться в этой базе данных, как показано в следующем примере.

Заметка

Этот способ подключения к базе данных работает только для SQL Server (не поддерживается в базе данных SQL Azure).

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey

Кроме того, можно указать путь к базе данных с помощью универсального параметра Path , а не переходить к базе данных.

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

Задачи постоянного шифрования с использованием PowerShell

Справочник по командлетам постоянного шифрования

Для постоянного шифрования доступны приведенные ниже командлеты PowerShell

Командлет Description
Add-SqlAzureAuthenticationContext Выполняет проверку подлинности в Azure и получает маркер проверки подлинности.
Add-SqlColumnEncryptionKeyValue Добавляет новое зашифрованное значение для существующего объекта ключа шифрования столбца в базе данных.
Complete-SqlColumnMasterKeyRotation Завершает смену главного ключа столбца.
Get-SqlColumnEncryptionKey Возвращает все объекты ключа шифрования столбца, определенные в базе данных, или возвращает один объект ключа шифрования столбца с указанным именем.
Get-SqlColumnMasterKey Возвращает объекты главного ключа столбца, определенные в базе данных, или возвращает один объект главного ключа столбца с указанным именем.
Invoke-SqlColumnMasterKeyRotation Инициирует смену главного ключа столбца.
New-SqlAzureKeyVaultColumnMasterKeySettings Создает объект SqlColumnMasterKeySettings, описывающий асимметричный ключ, который хранится в хранилище ключей Azure.
New-SqlCngColumnMasterKeySettings Создает объект SqlColumnMasterKeySettings, описывающий асимметричный ключ, который хранится в хранилище ключей, поддерживающем API CNG.
New-SqlColumnEncryptionKey Создает объект ключа шифрования столбца в базе данных.
New-SqlColumnEncryptionKeyEncryptedValue Выводит зашифрованное значение ключа шифрования столбца.
New-SqlColumnEncryptionSettings Создает объект SqlColumnEncryptionSettings, который инкапсулирует сведения о шифровании одного столбца, включая CEK и тип шифрования.
New-SqlColumnMasterKey Создает объект главного ключа столбца в базе данных.
New-SqlColumnMasterKeySettings Создает объект SqlColumnMasterKeySettings для главного ключа столбца с указанным поставщиком и путем к ключу.
New-SqlCspColumnMasterKeySettings Создает объект SqlColumnMasterKeySettings, описывающий асимметричный ключ, который хранится в хранилище ключей с поставщиком CSP, поддерживающим CAPI.
Remove-SqlColumnEncryptionKey Удаляет объект ключа шифрования столбца из базы данных.
Remove-SqlColumnEncryptionKeyValue Удаляет зашифрованное значение из существующего объекта ключа шифрования столбца в базе данных.
Remove-SqlColumnMasterKey Удаляет объект главного ключа столбца из базы данных.
Set-SqlColumnEncryption Шифрует, расшифровывает или повторно шифрует указанные столбцы в базе данных.

См. также