Configure Always Encrypted using PowerShell

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SqlServer PowerShell モジュールは、Azure SQL Database と SQL Server の両方で Always Encrypted を構成するコマンドレットを提供します。

PowerShell を使用して Always Encrypted を構成するときのセキュリティに関する考慮事項

Always Encrypted の主な目的は、データベース システムが侵害されても、暗号化された機密データが確実に保護されるようにすることにあるので、SQL Server コンピューター上でキーまたは機密データを処理する PowerShell スクリプトが実行されると、機能の効果が低下したり無効になったりするおそれがあります。 セキュリティ関連のその他の推奨事項については、 Security Considerations for Key Management(キー管理でのセキュリティに関する考慮事項) をご覧ください。

PowerShell を使うと、役割の分離を有効または無効にして、Always Encrypted キーを管理することができ、キー ストアの実際の暗号鍵にアクセスするユーザーと、データベースにアクセスできるユーザーを制御できます。

追加の推奨事項については、 Security Considerations for Key Management(キー管理でのセキュリティに関する考慮事項) を参照してください。

前提条件

SQL Server インスタンスをホストしているコンピューターではない安全なコンピューターに SqlServer PowerShell モジュール 22.0.50 以降をインストールします。 モジュールは、PowerShell ギャラリーから直接インストールできます。 詳細については、ダウンロードの手順を参照してください。

SqlServer モジュールをインポートする

SqlServer モジュールを読み込むには:

  1. 適切なスクリプト実行ポリシーを設定するには、 Set-ExecutionPolicy コマンドレットを使用します。
  2. SqlServer モジュールをインポートするには、 Import-Module コマンドレットを使用します。

次に示すのは SqlServer モジュールを読み込む例です。

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

データベースへの接続

一部の Always Encrypted コマンドレットはデータベースのデータまたはメタデータを操作するので、最初にデータベースに接続する必要があります。 SqlServer モジュールを使用して Always Encrypted を構成するときに推奨されるデータベース接続方法は次の 2 つです。

  1. Get-SqlDatabase コマンドレットを使用して接続します。
  2. SQL Server PowerShell プロバイダーを使用して接続します。

Get-SqlDatabase の使用

Get SqlDatabase コマンドレットを使うと、SQL Server または Azure SQL Database 内のデータベースに接続できます。 それによって返されるデータベース オブジェクトを、データベースに接続するコマンドレットの 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 に対してのみ動作します (Azure SQL Database ではサポートされていません)。

# 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 を使用した Always Encrypted のタスク

Always Encrypted コマンドレット リファレンス

Always Encrypted では次の PowerShell コマンドレットを使用できます。

コマンドレット 説明
Add-SqlAzureAuthenticationContext Azure への認証を実行し、認証トークンを取得します。
Add-SqlColumnEncryptionKeyValue データベースの既存の列暗号化キー オブジェクトに新しく暗号化された値を追加します。
Complete-SqlColumnMasterKeyRotation 列マスター キーのローテーションを完了します。
Get-SqlColumnEncryptionKey データベースで定義されているすべての列暗号化キー オブジェクトを返すか、指定された名前の特定の列暗号化キー オブジェクトを返します。
Get-SqlColumnMasterKey データベースで定義されている列マスター キー オブジェクトを返すか、指定された名前の特定の列マスター キー オブジェクトを返します。
Invoke-SqlColumnMasterKeyRotation 列マスター キーのローテーションを開始します。
New-SqlAzureKeyVaultColumnMasterKeySettings Azure Key Vault に格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。
New-SqlCngColumnMasterKeySettings Cryptography Next Generation (CNG) API をサポートするキー ストアに格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。
New-SqlColumnEncryptionKey データベースに列暗号化キー オブジェクトを作成します。
New-SqlColumnEncryptionKeyEncryptedValue 列暗号化キーの暗号化された値を生成します。
New-SqlColumnEncryptionSettings 1 つの列の暗号化に関する情報をカプセル化する SqlColumnEncryptionSettings オブジェクトを作成します。CEK と暗号化の種類を含みます。
New-SqlColumnMasterKey データベースに列マスター キー オブジェクトを作成します。
New-SqlColumnMasterKeySettings 指定されたプロバイダーとキーのパスを使用して、列マスター キーの SqlColumnMasterKeySettings オブジェクトを作成します。
New-SqlCspColumnMasterKeySettings Cryptography API (CAPI) をサポートする暗号化サービス プロバイダー (CSP) によってキー ストアに格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。
Remove-SqlColumnEncryptionKey データベースから列暗号化キー オブジェクトを削除します。
Remove-SqlColumnEncryptionKeyValue データベースの既存の列暗号化キー オブジェクトから暗号化された値を削除します。
Remove-SqlColumnMasterKey データベースから列マスター キー オブジェクトを削除します。
Set-SqlColumnEncryption データベースの指定された列を暗号化、復号化、または再暗号化します。

参照