Configure Always Encrypted using PowerShell

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En el módulo SqlServer PowerShell se proporcionan cmdlets para configurar Always Encrypted en Azure SQL Database o SQL Server.

Consideraciones de seguridad al usar PowerShell para configurar Always Encrypted

Dado que el objetivo principal de Always Encrypted es garantizar la seguridad de la información confidencial cifrada, incluso si el sistema de base de datos está en peligro, la ejecución de un script de PowerShell que procese las claves o la información confidencial en el equipo con SQL Server puede reducir o anular las ventajas de la característica. Para obtener más recomendaciones relacionadas con la seguridad, vea Security Considerations for Key Management(Consideraciones de seguridad para la administración de claves).

Puede usar PowerShell para administrar claves de Always Encrypted con y sin separación de roles, lo que proporciona control sobre quién tiene acceso a las claves de cifrado reales del almacén de claves y quién tiene acceso a la base de datos.

Para obtener más recomendaciones, vea Security Considerations for Key Management(Consideraciones de seguridad para la administración de claves).

Requisitos previos

Instale el módulo SqlServer PowerShell versión 22.0.50 o posterior en un equipo seguro distinto del equipo que hospeda la instancia de SQL Server. El módulo se puede instalar directamente desde la Galería de PowerShell. Vea las instrucciones de descarga para obtener más información.

Importar el módulo SqlServer

Para cargar el módulo SqlServer:

  1. Use el cmdlet Set-ExecutionPolicy para establecer la directiva de ejecución de script apropiada.
  2. Use el cmdlet Import-Module para importar el módulo SqlServer.

En este ejemplo se carga el módulo SqlServer.

# Import the SQL Server Module.  
Import-Module "SqlServer" -MinimumVersion 22.0.50

Conexión a una base de datos

Algunos de los cmdlets de Always Encrypted funcionan con datos o metadatos de la base de datos y requieren que se conecte primero a la base de datos. Hay dos métodos recomendados para conectarse a una base de datos al configurar Always Encrypted con el módulo SqlServer:

  1. Conéctese con el cmdlet Get-SqlDatabase.
  2. Conéctese con el proveedor de SQL Server PowerShell.

Uso de Get-SqlDatabase

El cmdlet Get-SqlDatabase le permite conectarse a una base de datos en SQL Server o en Azure SQL Database. Devuelve un objeto de base de datos, que luego se puede pasar con el parámetro InputObject de un cmdlet que se conecta a la base de datos.

Usar SQL Server PowerShell

# Import the SqlServer module
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database
# Set the valid server name, database name and authentication keywords in the connection string
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$database = Get-SqlDatabase -ConnectionString $connStr

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

También puede usar la canalización:

$database | Get-SqlColumnMasterKey

Uso del proveedor de SQL Server PowerShell

El proveedor de SQL Server PowerShell expone la jerarquía de objetos de SQL Server en rutas similares a las rutas de acceso al sistema de archivos. Con SQL Server PowerShell, puede navegar por las rutas de acceso mediante alias de Windows PowerShell similares a los comandos que se usan normalmente para navegar por las rutas de acceso al sistema de archivos. Una vez que se haya desplazado a la instancia de destino y la base de datos, los cmdlets posteriores tendrán como destino esa base de datos, como se muestra en el ejemplo siguiente.

Nota:

Este método de conexión a una base de datos solo funciona para SQL Server (no se admite en Base de datos SQL de Azure).

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey

También puede especificar una ruta de acceso a la base de datos mediante el parámetro genérico Path , en lugar de desplazarse a la base de datos.

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

Tareas de Always Encrypted mediante PowerShell

Referencia de cmdlets de Always Encrypted

Los siguientes cmdlets de PowerShell están disponibles para Always Encrypted:

CMDLET Descripción
Add-SqlAzureAuthenticationContext Realiza la autenticación en Azure y adquiere un token de autenticación.
Add-SqlColumnEncryptionKeyValue Agrega un nuevo valor cifrado para un objeto de clave de cifrado de columnas existente en la base de datos.
Complete-SqlColumnMasterKeyRotation Completa la rotación de una clave maestra de columna.
Get-SqlColumnEncryptionKey Devuelve todos los objetos de clave de cifrado de columnas definidos en la base de datos, o devuelve un objeto de clave de cifrado de columnas con el nombre especificado.
Get-SqlColumnMasterKey Devuelve los objetos de clave maestra de columna definidos en la base de datos, o devuelve un objeto de clave maestra de columna con el nombre especificado.
Invoke-SqlColumnMasterKeyRotation Inicia la rotación de una clave maestra de columna.
New-SqlAzureKeyVaultColumnMasterKeySettings Crea un objeto SqlColumnMasterKeySettings que describe una clave asimétrica almacenada en el Almacén de claves de Azure.
New-SqlCngColumnMasterKeySettings Crea un objeto SqlColumnMasterKeySettings que describe una clave asimétrica almacenada en un almacén de claves compatible con la API Cryptography Next Generation (CNG).
New-SqlColumnEncryptionKey Crea un objeto de clave de cifrado de columnas en la base de datos.
New-SqlColumnEncryptionKeyEncryptedValue Produce un valor cifrado de una clave de cifrado de columnas.
New-SqlColumnEncryptionSettings Crea un objeto SqlColumnEncryptionSettings que encapsula la información sobre el cifrado de una sola columna, incluida la CEK y el tipo de cifrado.
New-SqlColumnMasterKey Crea un objeto de clave maestra de columna en la base de datos.
New-SqlColumnMasterKeySettings Crea un objeto SqlColumnMasterKeySettings para una clave maestra de columna con el proveedor y la ruta de acceso de la clave especificados.
New-SqlCspColumnMasterKeySettings Crea un objeto SqlColumnMasterKeySettings que describe una clave asimétrica almacenada en un almacén de claves con un proveedor de servicios criptográficos (CSP) compatible con Cryptography API (CAPI).
Remove-SqlColumnEncryptionKey Quita de la base de datos el objeto de clave de cifrado de columnas.
Remove-SqlColumnEncryptionKeyValue Quita un valor cifrado de un objeto de clave de cifrado de columnas existente en la base de datos.
Remove-SqlColumnMasterKey Quita de la base de datos el objeto de clave maestra de columna.
Set-SqlColumnEncryption Cifra, descifra o vuelve a cifrar las columnas especificadas de la base de datos.

Consulte también