Set-SqlColumnEncryption

Cifra, descifra o vuelve a cifrar las columnas especificadas de la base de datos.

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

El cmdlet Set-SqlColumnEncryption cifra, descifra o vuelve a cifrar las columnas de base de datos especificadas mediante la característica Always Encrypted.

El cmdlet acepta una matriz de objetos SqlColumnEncryptionSettings , cada uno de los cuales especifica la configuración de cifrado de destino para una columna de la base de datos.

El cmdlet cifrará, descifrará o volverá a cifrar cada columna especificada, según cuál sea la configuración de cifrado actual de la columna y la configuración de cifrado de destino especificada.

El cmdlet se comunica con almacenes de claves que contienen claves maestras de columnas. Si alguna clave maestra de columna que protege las columnas que se van a cifrar, descifrar o volver a cifrar, se almacena en Azure, debe especificar un token de autenticación válido para un almacén de claves o un HSM administrado que contenga la clave. Como alternativa, puede autenticarse en Azure con Add-SqlAzureAuthenticationContext antes de llamar a este cmdlet.

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

Ejemplos

Ejemplo 1: Aplicar la configuración de cifrado de destino especificada a tres columnas de base de datos.

En este ejemplo, la dbo.Student.Id columna se cifra mediante cifrado determinista y la clave de cifrado de columna, denominada MyCEK.

La dbo.Student.LastName columna se cifra mediante el cifrado aleatorio y la clave de cifrado de columna, denominada MyCEK.

La dbo.StudentFirstName columna no está cifrada (si la columna se cifra inicialmente, se descifra).

En el ejemplo se usa el enfoque sin conexión, lo que significa que la tabla Student seguirá sin estar disponible para las actualizaciones a lo largo de la operación. Supongamos que la clave maestra de columna, que protege MyCEK, no se almacena en 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 .

Ejemplo 2: Aplique la configuración de cifrado de destino especificada a las tres columnas de base de datos (la clave maestra de columna se almacena en Azure Key Vault).

Este ejemplo es similar al anterior; la única diferencia es que la protección de la clave MyCEK maestra de columna se almacena en 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

Ejemplo 3: Aplicar la configuración de cifrado de destino especificada a tres columnas de base de datos mediante el enfoque en línea.

En esta tabla de ejemplo Student no estará disponible para lecturas y escrituras durante un máximo de 30 segundos (el valor especificado mediante el parámetro MaxDowntimeInSeconds ). Supongamos que la clave maestra de columna, que protege MyCEK, se almacena fuera de Azure (no es necesario pasar un token de 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 .

Ejemplo 4: Aplicar la configuración de cifrado de destino a varias columnas mediante el cifrado en contexto.

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

En este ejemplo se aplica la configuración de cifrado de destino a las columnas de base de datos mediante cifrado en contexto, siempre que se cumplan todos los requisitos previos para el cifrado en contexto, es decir, la base de datos tiene habilitado un enclave y las claves usadas en las operaciones criptográficas, que el cmdlet desencadena, están habilitadas para el enclave.

Parámetros

-AccessToken

Token de acceso que se usa para autenticarse en SQL Server, como alternativa a la autenticación de usuario o contraseña de Windows.

Esto se puede usar, por ejemplo, para conectarse a SQL Azure DB y SQL Azure Managed Instance usar o Service Principal .Managed Identity

El parámetro que se va a usar puede ser una cadena que representa el token o un PSAccessToken objeto tal como se devuelve mediante la ejecución Get-AzAccessToken -ResourceUrl https://database.windows.netde .

Este parámetro es nuevo en la versión 22 del módulo.

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

-ColumnEncryptionSettings

Especifica una matriz de objetos SqlColumnEncryptionSettings , cada uno de los cuales especifica la configuración de cifrado de destino para una columna de la base de datos.

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

-EnclaveAttestationProtocol

Especifica el protocolo de atestación de un enclave para Always Encrypted con enclaves seguros. Este parámetro es necesario para que el cmdlet realice operaciones criptográficas en contexto , dentro de un enclave seguro del lado servidor, para anular el gasto de descarga y carga de los datos. Tenga en cuenta que el cifrado local tiene otros requisitos previos: la base de datos debe tener un enclave configurado y debe usar claves criptográficas habilitadas para el 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 una dirección URL de atestación de enclave para el cifrado en contexto cuando se usa Always Encrypted con enclaves seguros. Obligatorio si EnclaveAttestationProtocol está establecido AAS en o HGS.

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

-Encrypt

Tipo de cifrado que se va a usar al conectarse a SQL Server.

Este valor se asigna a la Encrypt propiedad SqlConnectionEncryptOption del objeto SqlConnection del controlador Microsoft.Data.SqlClient.

En la versión 22 del módulo, el valor predeterminado es Optional (por compatibilidad con v21). En la versión 23+ del módulo, el valor predeterminado será "Obligatorio", lo que puede crear un cambio importante para los scripts existentes.

Este parámetro es nuevo en la versión 22 del 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

Nombre de host que se va a usar al validar el certificado TLS/SSL de SQL Server. Debe pasar este parámetro si la instancia de SQL Server está habilitada para Forzar cifrado y desea conectarse a una instancia mediante el nombre de host o el nombre corto. Si se omite este parámetro, es necesario pasar el nombre de dominio completo (FQDN) a -ServerInstance para conectarse a una instancia de SQL Server habilitada para forzar el cifrado.

Este parámetro es nuevo en la versión 22 del módulo.

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

-InputObject

Especifica el objeto de base de datos SQL para el que este cmdlet ejecuta la operación.

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

-KeepCheckForeignKeyConstraints

Si se establece, se conservan la semántica de comprobación (CHECK o NOCHECK) de restricciones de clave externa.

De lo contrario, si no se establece y si no se establece UseOnlineApproach , las restricciones de clave externa siempre se vuelven a crear con la opción NOCHECK para minimizar el impacto en las aplicaciones.

KeepCheckForeignKeyConstraints solo es válido cuando se establece UseOnlineApproach.

Con el enfoque sin conexión, la semántica de las restricciones de clave externa siempre se conserva.

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

-KeyVaultAccessToken

Especifica un token de acceso para almacenes de claves en Azure Key Vault. Use este parámetro si alguna de las claves maestras de columna que protegen las columnas que se van a cifrar, descifrar o volver a cifrar, se almacena en almacenes de claves en Azure Key Vault.

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

-LockTimeoutInSeconds

Especifica el tiempo máximo (en segundos) que el cmdlet esperará a los bloqueos de base de datos necesarios para comenzar la última iteración de puesta al día. Un valor de -1 (valor predeterminado) indica que no hay ningún período de tiempo de espera (es decir, esperar para siempre). Un valor de 0 significa no esperar en absoluto. Cuando se espera un bloqueo durante más tiempo que el indicado, se devuelve un error. Válido solo si se establece UseOnlineApproach .

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

-LogFileDirectory

Si se establece, el cmdlet creará un archivo de registro en el directorio especificado.

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

-ManagedHsmAccessToken

Especifica un token de acceso para los HSM administrados en Azure Key Vault. Use este parámetro si alguna de las claves maestras de columna que protegen las columnas que se van a cifrar, descifrar o volver a cifrar, se almacena en HSM administrados en Azure Key Vault.

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

-MaxDivergingIterations

Especifica el número máximo de iteraciones de puesta al día consecutivas, donde aumenta el número de filas procesadas. Cuando se alcanza este límite, el cmdlet supone que no podrá ponerse al día con los cambios realizados en la tabla de origen y anula la operación y vuelve a crear el estado original de la base de datos. Válido solo si se establece UseOnlineApproach . Debe ser menor que el valor de MaxIterations.

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

-MaxDowntimeInSeconds

Especifica el tiempo máximo (en segundos), durante el cual la tabla de origen no estará disponible para lecturas y escrituras. Válido solo si se establece UseOnlineApproach .

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

-MaxIterationDurationInDays

Especifica el tiempo máximo (en días) de propagación o una sola iteración de puesta al día. Si la propagación o cualquier iteración de puesta al día toma más del valor especificado, el cmdlet anula la operación y vuelve a crear el estado original de la base de datos. Válido solo si se establece UseOnlineApproach .

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

-MaxIterations

Especifica el número máximo de iteraciones en la fase de puesta al día. Cuando se alcanza este límite, el cmdlet anula la operación y vuelve a crear el estado original de la base de datos. Válido solo si se establece UseOnlineApproach .

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

-Path

Especifica la ruta de acceso de la base de datos SQL, para la que este cmdlet ejecuta la operación. Si no especifica un valor para este parámetro, el cmdlet usa la ubicación de trabajo actual.

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

-Script

Indica que este cmdlet devuelve un script de Transact-SQL que realiza la tarea que realiza este cmdlet.

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

-TrustServerCertificate

Indica si el canal se cifrará al pasar la cadena de certificados para validar la confianza.

En la versión 22 del módulo, el valor predeterminado es $true (por compatibilidad con v21). En la versión 23+ del módulo, el valor predeterminado será "$false", que puede crear un cambio importante para los scripts existentes.

Este parámetro es nuevo en la versión 22 del módulo.

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

-UseOnlineApproach

Si se establece, el cmdlet usará el enfoque en línea para asegurarse de que la base de datos está disponible para otras aplicaciones para lecturas y escrituras durante la mayor parte de la duración de la operación.

De lo contrario, el cmdlet bloqueará las tablas afectadas, por lo que no estarán disponibles para las actualizaciones de toda la operación. Las tablas estarán disponibles para las lecturas.

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

Entradas

Microsoft.SqlServer.Management.Smo.Database

Salidas

String