Set-SqlColumnEncryption
Cifra, descifra o vuelve a cifrar las columnas especificadas en la base de datos.
Sintaxis
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>]
[-AllowVerboseLogging]
[-InputObject] <Database>
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<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>]
[-AllowVerboseLogging]
[[-Path] <String>]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
Description
El cmdlet Set-SqlColumnEncryption cifra, descifra o vuelve a cifrar 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 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 cualquier clave maestra de columna que proteja 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 columna dbo.Student.Id
se cifra mediante cifrado determinista y la clave de cifrado de columna, denominada MyCEK
.
La columna dbo.Student.LastName
se cifra mediante cifrado aleatorio y la clave de cifrado de columna, denominada MyCEK
.
La columna dbo.StudentFirstName
no se cifra (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: Aplicación de 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; solo la diferencia es que la clave maestra de columna que protege MyCEK
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: Aplique la configuración de cifrado de destino especificada a tres columnas de base de datos mediante el enfoque en línea.
En este ejemplo Student
tabla no estará disponible para lecturas y escrituras durante un máximo de 30 segundos (el valor especificado con el parámetro MaxDowntimeInSeconds). Supongamos que la clave maestra de columna, que protege MyCEK
, se almacena fuera de Azure (no se requiere 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 local, siempre que se cumplan todos los requisitos previos para el cifrado local, es decir, la base de datos tiene habilitado un enclave y las claves usadas en las operaciones criptográficas, que desencadena el cmdlet, están habilitadas para el enclave.
Parámetros
-AccessToken
El 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
mediante un Service Principal
o un Managed Identity
.
El parámetro que se va a usar puede ser una cadena que representa el token o un objeto PSAccessToken
tal como se devuelve mediante la ejecución de Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Este parámetro es nuevo en la versión 22 del módulo.
Tipo: | PSObject |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-AllowVerboseLogging
Si se establece, el cmdlet agregará mensajes detallados al archivo de registro (si se establece el parámetro "LogFileDirectory") y conservará los archivos dacpac usados por las bibliotecas subyacentes para realizar la operación.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SqlColumnEncryptionSettings[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SqlConnectionAttestationProtocol |
Alias: | AttestationProtocol |
Valores aceptados: | NotSpecified, AAS, None, HGS |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-EnclaveAttestationURL
Especifica una dirección URL de atestación de enclave para el cifrado en contexto al usar Always Encrypted con enclaves seguros. Obligatorio si enclaveAttestationProtocol está establecido en AAS
o HGS
.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Encrypt
Tipo de cifrado que se va a usar al conectarse a SQL Server.
Este valor se asigna a la propiedad Encrypt
SqlConnectionEncryptOption
en el 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", que puede crear un cambio importante para los scripts existentes.
Este parámetro es nuevo en la versión 22 del módulo.
Tipo: | String |
Valores aceptados: | Mandatory, Optional, Strict |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-HostNameInCertificate
Nombre de host que se va a usar para 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 es necesario para conectarse a una instancia de SQL Server habilitada para Forzar cifrado.
Este parámetro es nuevo en la versión 22 del módulo.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-InputObject
Especifica el objeto de base de datos SQL para el que este cmdlet ejecuta la operación.
Tipo: | Database |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-KeyVaultAccessToken
Especifica un token de acceso para almacenes de claves en Azure Key Vault. Use este parámetro si cualquiera de las claves maestras de columna que protegen las columnas que se van a cifrar, descifrar o volver a cifrar, se almacenan en almacenes de claves en Azure Key Vault.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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 ningún período de tiempo de espera (es decir, esperar para siempre). Un valor de 0 significa no esperar en absoluto. Cuando una espera de un bloqueo supera el valor de tiempo de espera, se devuelve un error. Válido solo si se establece UseOnlineApproach.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | -1 |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-LogFileDirectory
Si se establece, el cmdlet creará un archivo de registro en el directorio especificado.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-ManagedHsmAccessToken
Especifica un token de acceso para los HSM administrados en Azure Key Vault. Use este parámetro si cualquiera de las claves maestras de columna que protegen las columnas que se van a cifrar, descifrar o volver a cifrar, se almacenan en HSM administrados en Azure Key Vault.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | 5 |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | 1800 |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-MaxIterationDurationInDays
Especifica el tiempo máximo (en días) de propagación o una única 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.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | 3 |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | 100 |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | String |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-ProgressAction
Determina cómo Responde PowerShell a las actualizaciones de progreso generadas por un script, cmdlet o proveedor, como las barras de progreso generadas por el cmdlet Write-Progress. El cmdlet Write-Progress crea barras de progreso que muestran el estado de un comando.
Tipo: | ActionPreference |
Alias: | proga |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Script
Indica que este cmdlet devuelve un script de Transact-SQL que realiza la tarea que realiza este cmdlet.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-TrustServerCertificate
Indica si el canal se cifrará mientras se pasa 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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, lo que hace que no estén disponibles para las actualizaciones de toda la operación. Las tablas estarán disponibles para lecturas.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Microsoft.SqlServer.Management.Smo.Database
Salidas
String