Configure Always Encrypted using PowerShell
Se aplica a: SQL Server Azure SQL Database Azure 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:
- Use el cmdlet Set-ExecutionPolicy para establecer la directiva de ejecución de script apropiada.
- 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:
- Conéctese con el cmdlet Get-SqlDatabase.
- 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
- Aprovisionamiento de claves de Always Encrypted mediante PowerShell
- Rotar claves de Always Encrypted con PowerShell
- Cifrado, recifrado o descifrado de columnas con 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. |