Configure Always Encrypted using PowerShell
適用対象: SQL Server Azure SQL Database Azure 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 モジュールを読み込むには:
- 適切なスクリプト実行ポリシーを設定するには、 Set-ExecutionPolicy コマンドレットを使用します。
- SqlServer モジュールをインポートするには、 Import-Module コマンドレットを使用します。
次に示すのは SqlServer モジュールを読み込む例です。
# Import the SQL Server Module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
データベースへの接続
一部の Always Encrypted コマンドレットはデータベースのデータまたはメタデータを操作するので、最初にデータベースに接続する必要があります。 SqlServer モジュールを使用して Always Encrypted を構成するときに推奨されるデータベース接続方法は次の 2 つです。
- Get-SqlDatabase コマンドレットを使用して接続します。
- 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 の別名を使用して、パスを操作できます。 ターゲットのインスタンスおよびデータベースに移動した後、後続のコマンドレットでは次の例で示すようにそのデータベースがターゲットにされます。
Note
このデータベース接続方法は、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 のタスク
- PowerShell を使用して Always Encrypted キーをプロビジョニングする
- PowerShell を使用した Always Encrypted キーの交換
- 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 | データベースの指定された列を暗号化、復号化、または再暗号化します。 |