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 つのデータベース列に適用します。
この例では、 という名前MyCEK
のdbo.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 が または HGS
にAAS
設定されている場合は必須です。
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