Set-SqlColumnEncryption
Chiffre, déchiffre ou rechiffre les colonnes spécifiées dans la base de données.
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
L’applet de commande Set-SqlColumnEncryption chiffre, déchiffre ou rechiffre les colonnes de base de données spécifiées à l’aide de la fonctionnalité Always Encrypted.
L’applet de commande accepte un tableau d’objets SqlColumnEncryptionSettings , chacun spécifiant la configuration de chiffrement cible pour une colonne de la base de données.
L’applet de commande chiffre, déchiffre ou rechiffre chaque colonne spécifiée, en fonction de la configuration de chiffrement actuelle de la colonne et des paramètres de chiffrement cible spécifiés.
L’applet de commande communique avec les magasins de clés qui contiennent des colonnes master clés. Si une colonne master clé protégeant les colonnes à chiffrer, déchiffrer ou rechiffrer est stockée dans Azure, vous devez spécifier un jeton d’authentification valide pour un coffre de clés ou un HSM managé contenant la clé. Vous pouvez également vous authentifier auprès d’Azure avec Add-SqlAzureAuthenticationContext avant d’appeler cette applet de commande.
Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.
Exemples
Exemple 1 : appliquez les paramètres de chiffrement cible spécifiés à trois colonnes de base de données.
Dans cet exemple, la colonne est chiffrée à l’aide dbo.Student.Id
d’un chiffrement déterministe et de la clé de chiffrement de colonne, nommée MyCEK
.
La dbo.Student.LastName
colonne est chiffrée à l’aide d’un chiffrement aléatoire et de la clé de chiffrement de colonne, nommée MyCEK
.
La dbo.StudentFirstName
colonne n’est pas chiffrée (si la colonne est initialement chiffrée, elle est déchiffrée).
L’exemple utilise l’approche hors connexion, ce qui signifie que la table Student reste indisponible pour les mises à jour tout au long de l’opération.
Supposons que la clé master colonne, protégeant MyCEK
, n’est pas stockée dans 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 .
Exemple 2 : Appliquez les paramètres de chiffrement cible spécifiés aux trois colonnes de base de données (colonne master clé est stockée dans Azure Key Vault.)
Cet exemple est similaire à celui ci-dessus ; la seule différence est que la colonne master clé de protection MyCEK
est stockée dans 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
Exemple 3 : appliquez les paramètres de chiffrement cible spécifiés à trois colonnes de base de données à l’aide de l’approche en ligne.
Dans cet exemple, Student
le tableau ne sera pas disponible pour les lectures et les écritures pendant 30 secondes maximum (la valeur spécifiée à l’aide du paramètre MaxDowntimeInSeconds.) Supposons que la colonne master clé, protégeant MyCEK
, soit stockée en dehors d’Azure (le passage d’un jeton Azure n’est pas nécessaire).
$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 .
Exemple 4 : appliquer les paramètres de chiffrement cible à plusieurs colonnes à l’aide du chiffrement sur place.
$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'
Cet exemple applique les paramètres de chiffrement cible aux colonnes de la base de données à l’aide du chiffrement sur place, à condition que toutes les conditions préalables au chiffrement sur place soient remplies, c’est-à-dire que la base de données a une enclave activée et que les clés utilisées dans les opérations de chiffrement, que l’applet de commande déclenche, sont activées pour les enclaves.
Paramètres
-AccessToken
Jeton d’accès utilisé pour s’authentifier auprès de SQL Server, comme alternative à l’authentification utilisateur/mot de passe ou Windows.
Cela peut être utilisé, par exemple, pour se connecter à et à SQL Azure DB
l’aide d’un Service Principal
ou d’un Managed Identity
.SQL Azure Managed Instance
Le paramètre à utiliser peut être une chaîne représentant le jeton ou un PSAccessToken
objet tel que retourné par l’exécution Get-AzAccessToken -ResourceUrl https://database.windows.net
de .
Ce paramètre est nouveau dans la version 22 du module.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ColumnEncryptionSettings
Spécifie un tableau d’objets SqlColumnEncryptionSettings , chacun spécifiant la configuration de chiffrement cible pour une colonne de la base de données.
Type: | SqlColumnEncryptionSettings[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-EnclaveAttestationProtocol
Spécifie le protocole d’attestation d’une enclave pour Always Encrypted avec enclaves sécurisées. Ce paramètre est requis pour que l’applet de commande effectue des opérations de chiffrement sur place, à l’intérieur d’une enclave sécurisée côté serveur, afin d’annuler les frais de téléchargement et de chargement des données. Notez que le chiffrement sur place présente d’autres prérequis : votre base de données doit avoir une enclave configurée et vous devez utiliser des clés de chiffrement prenant en charge les enclaves.
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
Spécifie une URL d’attestation d’enclave pour le chiffrement sur place lors de l’utilisation de Always Encrypted avec enclaves sécurisées. Obligatoire si EnclaveAttestationProtocol a la valeur AAS
ou HGS
.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
Type de chiffrement à utiliser lors de la connexion à SQL Server.
Cette valeur est mappée à la Encrypt
propriété SqlConnectionEncryptOption
sur l’objet SqlConnection du pilote Microsoft.Data.SqlClient.
Dans la version 22 du module, la valeur par défaut est Optional
(pour la compatibilité avec v21). Dans la version 23+ du module, la valeur par défaut est « Obligatoire », ce qui peut créer une modification cassant pour les scripts existants.
Ce paramètre est nouveau dans la version 22 du module.
Type: | String |
Accepted values: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostNameInCertificate
Nom d’hôte à utiliser pour valider le certificat SQL Server TLS/SSL. Vous devez passer ce paramètre si votre SQL Server instance est activé pour Forcer le chiffrement et que vous souhaitez vous connecter à un instance à l’aide de nom d’hôte/nom_court. Si ce paramètre est omis, le passage du nom de domaine complet (FQDN) à -ServerInstance est nécessaire pour se connecter à un SQL Server instance activé pour forcer le chiffrement.
Ce paramètre est nouveau dans la version 22 du module.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Spécifie l’objet de base de données SQL pour lequel cette applet de commande exécute l’opération.
Type: | Database |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-KeepCheckForeignKeyConstraints
Si cette option est définie, case activée sémantique (CHECK ou NOCHECK) des contraintes de clé étrangère sont conservées.
Sinon, si elle n’est pas définie et si UseOnlineApproach n’est pas définie, les contraintes de clé étrangère sont toujours recréées avec l’option NOCHECK pour réduire l’impact sur les applications.
KeepCheckForeignKeyConstraints est valide uniquement lorsque UseOnlineApproach est défini.
Avec l’approche hors connexion, la sémantique des contraintes de clé étrangère est toujours conservée.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-KeyVaultAccessToken
Spécifie un jeton d’accès pour les coffres de clés dans Azure Key Vault. Utilisez ce paramètre si l’une des clés de master colonne protégeant les colonnes à chiffrer, déchiffrer ou rechiffrer est stockée dans des coffres de clés dans Azure Key Vault.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LockTimeoutInSeconds
Spécifie la durée maximale (en secondes) pendant laquelle l’applet de commande attend les verrous de base de données nécessaires pour commencer la dernière itération de rattrapage. La valeur -1 (valeur par défaut) indique qu’il n’y a pas de délai d’expiration (c’est-à-dire attendre pour toujours). La valeur 0 signifie ne pas attendre du tout. Si le délai d'attente avant la libération d'un verrou est supérieur au délai d'expiration spécifié, une erreur est renvoyée. Valide uniquement si UseOnlineApproach est défini.
Type: | Int32 |
Position: | Named |
Default value: | -1 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LogFileDirectory
Si elle est définie, l’applet de commande crée un fichier journal dans le répertoire spécifié.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ManagedHsmAccessToken
Spécifie un jeton d’accès pour les HSM managés dans Azure Key Vault. Utilisez ce paramètre si l’une des clés de master de colonne protégeant les colonnes à chiffrer, déchiffrer ou rechiffrer est stockée dans des HSM managés dans Azure Key Vault.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxDivergingIterations
Spécifie le nombre maximal d’itérations de rattrapage consécutives, où le nombre de lignes traitées augmente. Lorsque cette limite est atteinte, l’applet de commande suppose qu’elle ne sera pas en mesure de rattraper les modifications apportées à la table source, et elle abandonne l’opération et recrée l’état d’origine de la base de données. Valide uniquement si UseOnlineApproach est défini. Doit être inférieur à la valeur de MaxIterations.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxDowntimeInSeconds
Spécifie la durée maximale (en secondes) pendant laquelle la table source ne sera pas disponible pour les lectures et les écritures. Valide uniquement si UseOnlineApproach est défini.
Type: | Int32 |
Position: | Named |
Default value: | 1800 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxIterationDurationInDays
Spécifie la durée maximale (en jours) d’amorçage ou d’une seule itération de rattrapage. Si l’amorçage ou toute itération de rattrapage prend plus que la valeur spécifiée, l’applet de commande abandonne l’opération et recrée l’état d’origine de la base de données. Valide uniquement si UseOnlineApproach est défini.
Type: | Int32 |
Position: | Named |
Default value: | 3 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxIterations
Spécifie le nombre maximal d’itérations dans la phase de rattrapage. Lorsque cette limite est atteinte, l’applet de commande abandonne l’opération et recrée l’état d’origine de la base de données. Valide uniquement si UseOnlineApproach est défini.
Type: | Int32 |
Position: | Named |
Default value: | 100 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Spécifie le chemin de la base de données SQL pour laquelle cette applet de commande exécute l’opération. Si vous ne spécifiez pas de valeur pour ce paramètre, l’applet de commande utilise l’emplacement de travail actuel.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Script
Indique que cette applet de commande retourne un script Transact-SQL qui effectue la tâche effectuée par cette applet de commande.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
Indique si le canal sera chiffré tout en contournant la chaîne de certificats pour valider l’approbation.
Dans la version 22 du module, la valeur par défaut est $true
(pour la compatibilité avec v21). Dans v23+ du module, la valeur par défaut est « $false », ce qui peut créer une modification cassant pour les scripts existants.
Ce paramètre est nouveau dans la version 22 du module.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseOnlineApproach
Si elle est définie, l’applet de commande utilise l’approche en ligne pour s’assurer que la base de données est disponible pour d’autres applications pour les lectures et les écritures pendant la majeure partie de la durée de l’opération.
Sinon, l’applet de commande verrouille les tables concernées, ce qui les rend indisponibles pour les mises à jour pour l’ensemble de l’opération. Les tables seront disponibles pour les lectures.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Microsoft.SqlServer.Management.Smo.Database
Sorties
String