Configurer Always Encrypted à l’aide de PowerShell

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Le module SqlServer PowerShell fournit des cmdlets pour configurer Always Encrypted dans la base de données Azure SQL ou SQL Server.

Considérations de sécurité sur l’utilisation de PowerShell pour configurer Always Encrypted

L’objectif principal d’Always Encrypted étant de garantir la sécurité des données sensibles chiffrées même si le système de base de données est compromis, l’exécution d’un script PowerShell qui traite des clés ou des données sensibles sur l’ordinateur SQL Server peut réduire ou annuler les avantages de la fonctionnalité. Pour obtenir des recommandations supplémentaires relatives à la sécurité, consultez Considérations en matière de sécurité pour la gestion des clés.

Vous pouvez utiliser PowerShell pour gérer des clés Always Encrypted avec et sans séparation des rôles, ce qui permet de contrôler qui a accès aux clés de chiffrement réelles du magasin de clés et qui a accès à la base de données.

Pour obtenir des recommandations supplémentaires, consultez Considérations en matière de sécurité pour la gestion des clés.

Prérequis

Installez le module SqlServer PowerShell version 22.0.50 ou ultérieure sur un ordinateur sécurisé qui n’est PAS un ordinateur hébergeant votre instance SQL Server. Vous pouvez installer le module directement à partir de PowerShell Gallery. Pour plus d’informations, consultez les instructions de téléchargement.

Importation du module SqlServer

Pour charger le module SqlServer

  1. Utilisez l’applet de commande Set-ExecutionPolicy pour définir la stratégie d’exécution de scripts appropriée.
  2. Utilisez l’applet de commande Import-Module pour importer le module SqlServer.

Cet exemple charge le module SQL Server.

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

Connexion à une base de données

Certaines des applets de commande Always Encrypted fonctionnent avec des données ou des métadonnées dans la base de données et nécessitent que vous vous connectiez d’abord à la base de données. Il existe deux méthodes recommandées pour se connecter à une base de données lors de la configuration d’Always Encrypted à l’aide du module SqlServer :

  1. Se connecter à l’aide de l’applet de commande Get-SqlDatabase.
  2. Se connecter à l’aide d’un fournisseur SQL Server PowerShell.

Utilisation de Get-SqlDatabase

L’applet de commande Get-SqlDatabase vous permet de vous connecter à une base de données dans SQL Server ou Azure SQL Database. Elle retourne un objet de base de données, que vous pouvez ensuite passer à l’aide du paramètre InputObject d’une applet de commande qui se connecte à la base de données.

Utilisation de 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

Vous pouvez également utiliser un canal :

$database | Get-SqlColumnMasterKey

Utilisation du fournisseur SQL Server PowerShell

Le fournisseur SQL Server PowerShell présente la hiérarchie des objets SQL Server dans des chemins semblables aux chemins de système de fichiers. Avec SQL Server PowerShell, vous pouvez parcourir les chemins à l’aide d’alias Windows PowerShell semblables aux commandes que vous utilisez généralement pour parcourir les chemins du système de fichiers. Une fois que vous accédez à l’instance cible et à la base de données, les applets de commande suivantes ciblent cette base de données, comme indiqué dans l’exemple suivant.

Remarque

Cette méthode de connexion à une base de données fonctionne uniquement pour SQL Server (elle n’est pas prise en charge dans Azure SQL Database).

# 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

Vous pouvez également spécifier un chemin de base de données à l’aide du paramètre générique Path , au lieu de naviguer dans la base de données.

# 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

Tâches Always Encrypted à l’aide de PowerShell

Référence des applets de commande Always Encrypted

Les applets de commande PowerShell suivantes sont disponibles pour Always Encrypted :

APPLET DE COMMANDE Description
Add-SqlAzureAuthenticationContext Effectue une authentification dans Azure et acquiert un jeton d’authentification.
Add-SqlColumnEncryptionKeyValue Ajoute une nouvelle valeur chiffrée pour un objet de clé de chiffrement de colonne existant dans la base de données.
Complete-SqlColumnMasterKeyRotation Met fin à la permutation d’une clé principale de colonne
Get-SqlColumnEncryptionKey Retourne tous les objets de clés de chiffrement de colonne définis dans la base de données, ou retourne un objet de clé de chiffrement de colonne portant le nom spécifié.
Get-SqlColumnMasterKey Retourne les objets de clés principales de colonne définis dans la base de données, ou retourne un objet de clé principale de colonne portant le nom spécifié.
Invoke-SqlColumnMasterKeyRotation Lance la permutation d’une clé principale de colonne.
New-SqlAzureKeyVaultColumnMasterKeySettings Crée un objet SqlColumnMasterKeySettings décrivant une clé asymétrique stockée dans Azure Key Vault.
New-SqlCngColumnMasterKeySettings Crée un objet SqlColumnMasterKeySettings décrivant une clé asymétrique stockée dans un magasin de clés prenant en charge l’API CNG (Cryptography Next Generation).
New-SqlColumnEncryptionKey Crée un objet clé de chiffrement de colonne dans la base de données.
New-SqlColumnEncryptionKeyEncryptedValue Génère une valeur chiffrée d’une clé de chiffrement de colonne.
New-SqlColumnEncryptionSettings Crée un objet SqlColumnEncryptionSettings qui encapsule des informations sur le chiffrement d’une colonne unique, notamment le type de chiffrement et la clé de chiffrement de colonne.
New-SqlColumnMasterKey Crée un objet clé principale de colonne dans la base de données.
New-SqlColumnMasterKeySettings Crée un objet SqlColumnMasterKeySettings pour une clé principale de colonne avec le fournisseur et le chemin d’accès à la clé spécifiés.
New-SqlCspColumnMasterKeySettings Crée un objet SqlColumnMasterKeySettings décrivant une clé asymétrique stockée dans un magasin de clés avec un fournisseur de services de chiffrement prenant en charge l’API CAPI (Cryptography API).
Remove-SqlColumnEncryptionKey Supprime l’objet de clé de chiffrement de colonne de la base de données.
Remove-SqlColumnEncryptionKeyValue Supprime une valeur chiffrée d’un objet de clé de chiffrement de colonne existant dans la base de données.
Remove-SqlColumnMasterKey Supprime l’objet de clé principale de colonne de la base de données.
Set-SqlColumnEncryption Chiffre, déchiffre ou rechiffre les colonnes spécifiées dans la base de données.

Voir aussi