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

説明

Set-SqlColumnEncryption コマンドレットは、Always Encrypted機能を使用して、指定されたデータベース列を暗号化、暗号化解除、または再暗号化します。

コマンドレットは SqlColumnEncryptionSettings オブジェクトの配列を受け入れます。各オブジェクトは、データベース内の 1 つの列のターゲット暗号化構成を指定します。

コマンドレットは、列の現在の暗号化構成と指定されたターゲット暗号化設定に応じて、指定された各列の暗号化、暗号化解除、または再暗号化を行います。

コマンドレットは、列マスター キーを保持するキー ストアと通信します。 暗号化、暗号化解除、または再暗号化される列を保護する列マスター キーが Azure に格納されている場合は、キー コンテナーまたはキーを保持するマネージド HSM の有効な認証トークンを指定する必要があります。 または、このコマンドレットを呼び出す前に 、Add-SqlAzureAuthenticationContext を 使用して Azure に対して認証を行うことができます。

Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.

例 1: 指定したターゲット暗号化設定を 3 つのデータベース列に適用します。

この例では、 という名前MyCEKdbo.Student.Id決定論的暗号化と列暗号化キーを使用して列が暗号化されます。

列は 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: 指定したターゲット暗号化設定を 3 つのデータベース列に適用します (列マスター キーは 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: オンライン アプローチを使用して、指定したターゲット暗号化設定を 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

ユーザー/パスワードまたは Windows 認証の代わりに、SQL Serverの認証に使用されるアクセス トークン。

これは、たとえば、 または Managed Identityに接続SQL Azure DBして SQL Azure Managed Instance 使用するために使用Service Principalできます。

使用するパラメーターには、 を実行Get-AzAccessToken -ResourceUrl https://database.windows.netして返されるトークンまたはオブジェクトをPSAccessToken表す文字列を指定できます。

このパラメーターは、モジュールの v22 の新機能です。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ColumnEncryptionSettings

SqlColumnEncryptionSettings オブジェクトの配列を指定します。各オブジェクトは、データベース内の 1 つの列のターゲット暗号化構成を指定します。

Type:SqlColumnEncryptionSettings[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-EnclaveAttestationProtocol

セキュリティで保護されたエンクレーブを持つAlways Encryptedのエンクレーブの構成証明プロトコルを指定します。 このパラメーターは、データのダウンロードとアップロードの費用を無効にするために、コマンドレットがサーバー側のセキュリティで保護されたエンクレーブ内で暗号化操作をインプレースで実行するために必要です。 インプレース暗号化には他の前提条件があることに注意してください。データベースにはエンクレーブが構成されている必要があり、エンクレーブ対応の暗号化キーを使用する必要があります。

Type:SqlConnectionAttestationProtocol
Aliases:AttestationProtocol
Accepted values:NotSpecified, AAS, None, HGS
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EnclaveAttestationURL

セキュリティで保護されたエンクレーブでAlways Encryptedを使用する場合のインプレース暗号化のエンクレーブ構成証明 URL を指定します。 EnclaveAttestationProtocol が または HGSAAS設定されている場合は必須です。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

SQL Serverに接続するときに使用する暗号化の種類。

この値は、 Encrypt Microsoft.Data.SqlClient ドライバーの SqlConnection オブジェクトの プロパティ SqlConnectionEncryptOption にマップされます。

モジュールの v22 では、既定値は Optional (v21 との互換性のために) です。 モジュールの v23 以降では、既定値は "必須" になります。これにより、既存のスクリプトに破壊的変更が発生する可能性があります。

このパラメーターは、モジュールの v22 の新機能です。

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

SQL Server TLS/SSL 証明書の検証に使われるホスト名。 SQL Server インスタンスが Force Encryption に対して有効になっており、hostname/shortname を使用してインスタンスに接続する場合は、このパラメーターを渡す必要があります。 このパラメーターを省略した場合、強制暗号化が有効になっているSQL Server インスタンスに接続するには、完全修飾ドメイン名 (FQDN) を -ServerInstance に渡す必要があります。

このパラメーターは、モジュールの v22 の新機能です。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

このコマンドレットが操作を実行する SQL データベース オブジェクトを指定します。

Type:Database
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-KeepCheckForeignKeyConstraints

設定すると、外部キー制約のチェックセマンティクス (CHECK または NOCHECK) が保持されます。

それ以外の場合は、設定されていない場合、 および UseOnlineApproach が設定されていない場合、外部キー制約は常に NOCHECK オプションを使用して再作成され、アプリケーションへの影響を最小限に抑えます。

KeepCheckForeignKeyConstraints は、UseOnlineApproach が設定されている場合にのみ有効です。

オフラインアプローチでは、外部キー制約のセマンティクスは常に保持されます。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

Azure Key Vaultのキー コンテナーのアクセス トークンを指定します。 暗号化、暗号化解除、または再暗号化する列を保護する列マスター キーのいずれかが Azure Key Vaultのキー コンテナーに格納されている場合は、このパラメーターを使用します。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LockTimeoutInSeconds

コマンドレットが最後のキャッチアップ イテレーションを開始するために必要なデータベース ロックを待機する最大時間 (秒単位) を指定します。 値 -1 (既定値) は、タイムアウト期間がないことを示します (つまり、永続的に待機します)。 値 0 は、まったく待機しないことを意味します。 ロックの待ち時間がタイムアウト値を超えると、エラーが返されます。 UseOnlineApproach が設定されている場合にのみ有効です。

Type:Int32
Position:Named
Default value:-1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LogFileDirectory

設定した場合、コマンドレットは指定されたディレクトリにログ ファイルを作成します。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

Azure Key Vaultのマネージド HSM のアクセス トークンを指定します。 暗号化、暗号化解除、または再暗号化する列を保護する列マスター キーのいずれかが、Azure Key Vaultのマネージド HSM に格納されている場合は、このパラメーターを使用します。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDivergingIterations

連続するキャッチアップ イテレーションの最大数を指定します。ここで、処理された行の数が増えます。 この制限に達すると、コマンドレットは、ソース テーブルで行われた変更に追いつくことができませんと想定し、操作を中止して、データベースの元の状態を再作成します。 UseOnlineApproach が設定されている場合にのみ有効です。 MaxIterations の値より小さくする必要があります。

Type:Int32
Position:Named
Default value:5
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDowntimeInSeconds

ソース テーブルを読み取りと書き込みに使用できない最大時間 (秒単位) を指定します。 UseOnlineApproach が設定されている場合にのみ有効です。

Type:Int32
Position:Named
Default value:1800
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterationDurationInDays

シード処理の最大時間 (日数) または 1 回のキャッチアップ イテレーションを指定します。 シード処理またはキャッチアップイテレーションに指定した値を超える時間がかかる場合、コマンドレットは操作を中止し、データベースの元の状態を再作成します。 UseOnlineApproach が設定されている場合にのみ有効です。

Type:Int32
Position:Named
Default value:3
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterations

キャッチアップ フェーズでのイテレーションの最大数を指定します。 この制限に達すると、コマンドレットは操作を中止し、データベースの元の状態を再作成します。 UseOnlineApproach が設定されている場合にのみ有効です。

Type:Int32
Position:Named
Default value:100
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

このコマンドレットが操作を実行する SQL データベースのパスを指定します。 このパラメーターの値を指定しない場合、コマンドレットは現在の作業場所を使用します。

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Script

このコマンドレットによって、このコマンドレットが実行するタスクを実行する Transact-SQL スクリプトが返されることを示します。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

信頼を検証するために証明書チェーンのウォークをバイパスしながらチャネルを暗号化するかどうかを示します。

モジュールの v22 では、既定値は $true (v21 との互換性のために) です。 モジュールの v23 以降では、既定値は "$false" になり、既存のスクリプトに破壊的変更が生じる可能性があります。

このパラメーターは、モジュールの v22 の新機能です。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseOnlineApproach

設定されている場合、コマンドレットはオンラインアプローチを使用して、操作のほとんどの期間、読み取りと書き込みの両方でデータベースを他のアプリケーションが使用できるようにします。

それ以外の場合、コマンドレットは影響を受けるテーブルをロックし、操作全体の更新を使用できなくなります。 テーブルは読み取りに使用できます。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

Microsoft.SqlServer.Management.Smo.Database

出力

String