Set-SqlColumnEncryption

Criptografa, descriptografa ou criptografa novamente as colunas especificadas no banco de dados.

Syntax

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>]

Description

O cmdlet Set-SqlColumnEncryption criptografa, descriptografa ou criptografa novamente as colunas de banco de dados especificadas usando o recurso Always Encrypted.

O cmdlet aceita uma matriz de objetos SqlColumnEncryptionSettings , cada um dos quais especifica a configuração de criptografia de destino para uma coluna no banco de dados.

O cmdlet criptografará, descriptografará ou criptografará novamente cada coluna especificada, dependendo da configuração de criptografia atual da coluna e das configurações de criptografia de destino especificadas.

O cmdlet se comunica com repositórios de chaves que contêm colunas master chaves. Se qualquer coluna master chave que protege as colunas a serem criptografadas, descriptografadas ou criptografadas novamente, estiver armazenada no Azure, você precisará especificar um token de autenticação válido para um cofre de chaves ou um HSM gerenciado que contém a chave. Como alternativa, você pode autenticar no Azure com Add-SqlAzureAuthenticationContext antes de chamar esse cmdlet.

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

Exemplos

Exemplo 1: aplique as configurações de criptografia de destino especificadas a três colunas de banco de dados.

Neste exemplo, a dbo.Student.Id coluna é criptografada usando criptografia determinística e a chave de criptografia de coluna, chamada MyCEK.

A dbo.Student.LastName coluna é criptografada usando criptografia aleatória e a chave de criptografia de coluna, chamada MyCEK.

A dbo.StudentFirstName coluna não é criptografada (se a coluna for criptografada inicialmente, ela será descriptografada).

O exemplo usa a abordagem offline, o que significa que a tabela Student permanecerá indisponível para atualizações durante toda a operação. Suponha que a coluna master chave, protegendo MyCEK, não está armazenada no 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 .

Exemplo 2: aplicar as configurações de criptografia de destino especificadas às três colunas de banco de dados (a chave de master de coluna é armazenada no Azure Key Vault.)

Este exemplo é semelhante ao mostrado acima; A única diferença é que a coluna master proteção MyCEK de chave é armazenada no 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

Exemplo 3: aplique as configurações de criptografia de destino especificadas a três colunas de banco de dados usando a abordagem online.

Neste exemploStudent, a tabela ficará indisponível para leituras e gravações por até 30 segundos (o valor especificado usando o parâmetro MaxDowntimeInSeconds.) Suponha que a coluna master chave, protegendo MyCEK, esteja armazenada fora do Azure (não é necessário passar um token do 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 .

Exemplo 4: aplicar configurações de criptografia de destino a várias colunas usando a criptografia in-loco.

$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'

Este exemplo aplica as configurações de criptografia de destino às colunas de banco de dados usando criptografia in-loco, desde que todos os pré-requisitos para criptografia in-loco sejam atendidos, ou seja, o banco de dados tem um enclave habilitado e as chaves usadas em operações criptográficas, que o cmdlet dispara, são habilitadas para enclave.

Parâmetros

-AccessToken

O token de acesso usado para autenticar em SQL Server, como uma alternativa ao usuário/senha ou à Autenticação do Windows.

Isso pode ser usado, por exemplo, para se conectar e SQL Azure DBSQL Azure Managed Instance usar um Service Principal ou um Managed Identity.

O parâmetro a ser usado pode ser uma cadeia de caracteres que representa o token ou um PSAccessToken objeto conforme retornado executando Get-AzAccessToken -ResourceUrl https://database.windows.net.

Esse parâmetro é novo na v22 do módulo.

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

-ColumnEncryptionSettings

Especifica uma matriz de objetos SqlColumnEncryptionSettings , cada um dos quais especifica a configuração de criptografia de destino para uma coluna no banco de dados.

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

-EnclaveAttestationProtocol

Especifica o protocolo de atestado de um enclave para Always Encrypted com enclaves seguros. Esse parâmetro é necessário para que o cmdlet execute operações criptográficas in-loco - dentro de um enclave seguro do lado do servidor - para anular a despesa de baixar e carregar os dados. Observe que a criptografia in-loco tem outros pré-requisitos: seu banco de dados deve ter um enclave configurado e você precisa usar chaves criptográficas habilitadas para enclave.

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

Especifica uma URL de atestado de enclave para criptografia in-loco ao usar Always Encrypted com enclaves seguros. Obrigatório se EnclaveAttestationProtocol estiver definido como AAS ou HGS.

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

-Encrypt

O tipo de criptografia a ser usado ao se conectar a SQL Server.

Esse valor é mapeado para a Encrypt propriedade SqlConnectionEncryptOption no objeto SqlConnection do driver Microsoft.Data.SqlClient.

Na v22 do módulo, o padrão é Optional (para compatibilidade com v21). Na v23+ do módulo, o valor padrão será 'Obrigatório', o que pode criar uma alteração interruptiva para scripts existentes.

Esse parâmetro é novo na v22 do módulo.

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

-HostNameInCertificate

O nome do host a ser usado na validação do certificado TLS/SSL do SQL Server. Você deve passar esse parâmetro se a instância de SQL Server estiver habilitada para Forçar Criptografia e quiser se conectar a uma instância usando nome do host/nome curto. Se esse parâmetro for omitido, será necessário passar o FQDN (Nome de Domínio Totalmente Qualificado) para -ServerInstance para se conectar a uma instância de SQL Server habilitada para Forçar Criptografia.

Esse parâmetro é novo na v22 do módulo.

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

-InputObject

Especifica o objeto de banco de dados SQL, para o qual esse cmdlet executa a operação.

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

-KeepCheckForeignKeyConstraints

Se definido, marcar semântica (CHECK ou NOCHECK) de restrições de chave estrangeira serão preservadas.

Caso contrário, se não estiver definido e se UseOnlineApproach não estiver definido, as restrições de chave estrangeira serão sempre recriadas com a opção NOCHECK para minimizar o impacto nos aplicativos.

KeepCheckForeignKeyConstraints é válido somente quando UseOnlineApproach está definido.

Com a abordagem offline, a semântica das restrições de chave estrangeira é sempre preservada.

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

-KeyVaultAccessToken

Especifica um token de acesso para cofres de chaves no Azure Key Vault. Use esse parâmetro se qualquer uma das chaves master coluna que protegem as colunas a serem criptografadas, descriptografadas ou criptografadas novamente, forem armazenadas em cofres de chaves no Azure Key Vault.

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

-LockTimeoutInSeconds

Especifica o tempo máximo (em segundos) que o cmdlet aguardará pelos bloqueios de banco de dados necessários para iniciar a última iteração de atualização. Um valor de -1 (padrão) indica nenhum período de tempo limite (ou seja, esperar para sempre). Um valor de 0 significa não esperar. Quando uma espera por um bloqueio exceder o valor limite, um erro será retornado. Válido somente se UseOnlineApproach estiver definido.

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

-LogFileDirectory

Se definido, o cmdlet criará um arquivo de log no diretório especificado.

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

-ManagedHsmAccessToken

Especifica um token de acesso para HSMs gerenciados no Azure Key Vault. Use esse parâmetro se qualquer uma das chaves master coluna que protegem as colunas a serem criptografadas, descriptografadas ou criptografadas novamente, forem armazenadas em HSMs gerenciados no Azure Key Vault.

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

-MaxDivergingIterations

Especifica o número máximo de iterações de recuperação consecutivas, em que o número de linhas processadas aumenta. Quando esse limite é atingido, o cmdlet pressupõe que ele não será capaz de acompanhar as alterações feitas na tabela de origem e anula a operação e recria o estado original do banco de dados. Válido somente se UseOnlineApproach estiver definido. Deve ser menor que o valor de MaxIterations.

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

-MaxDowntimeInSeconds

Especifica o tempo máximo (em segundos), durante o qual a tabela de origem não estará disponível para leituras e gravações. Válido somente se UseOnlineApproach estiver definido.

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

-MaxIterationDurationInDays

Especifica o tempo máximo (em dias) de propagação ou uma única iteração de atualização. Se a propagação ou qualquer iteração de atualização levar mais do que o valor especificado, o cmdlet anulará a operação e recria o estado original do banco de dados. Válido somente se UseOnlineApproach estiver definido.

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

-MaxIterations

Especifica o número máximo de iterações na fase de atualização. Quando esse limite é atingido, o cmdlet anula a operação e recria o estado original do banco de dados. Válido somente se UseOnlineApproach estiver definido.

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

-Path

Especifica o caminho do banco de dados SQL para o qual esse cmdlet executa a operação. Se você não especificar um valor para esse parâmetro, o cmdlet usará o local de trabalho atual.

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

-Script

Indica que esse cmdlet retorna um script Transact-SQL que executa a tarefa que este cmdlet executa.

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

-TrustServerCertificate

Indica se o canal será criptografado ao ignorar a movimentação da cadeia de certificados para validar a confiança.

Na v22 do módulo, o padrão é $true (para compatibilidade com v21). Na v23+ do módulo, o valor padrão será "$false", o que pode criar uma alteração interruptiva para scripts existentes.

Esse parâmetro é novo na v22 do módulo.

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

-UseOnlineApproach

Se definido, o cmdlet usará a abordagem online para garantir que o banco de dados esteja disponível para outros aplicativos para leituras e gravações durante a maior parte da operação.

Caso contrário, o cmdlet bloqueará as tabelas afetadas, tornando-as indisponíveis para atualizações de toda a operação. As tabelas estarão disponíveis para leituras.

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

Entradas

Microsoft.SqlServer.Management.Smo.Database

Saídas

String