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.net
de .
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