Partager via


Set-SqlColumnEncryption

Chiffre, déchiffre ou chiffre à nouveau les colonnes spécifiées dans la base de données.

Syntaxe

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

La Set-SqlColumnEncryption applet de commande chiffre, déchiffre ou chiffre à nouveau 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 actuelle du chiffrement de la colonne et des paramètres de chiffrement cibles spécifiés.

L’applet de commande communique avec les magasins de clés qui contiennent des clés principales de colonnes. Si une clé principale de colonne protégeant les colonnes à chiffrer, déchiffrer ou rechiffrée est stockée dans Azure, vous devez spécifier un jeton d’authentification valide pour un coffre de clés ou un HSM managé qui contient 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 dbo.Student.Id est chiffrée à l’aide du chiffrement déterministe et de la clé de chiffrement de colonne, nommée MyCEK.

La colonne dbo.Student.LastName est chiffrée à l’aide du chiffrement aléatoire et de la clé de chiffrement de colonne, nommée MyCEK.

La colonne dbo.StudentFirstName 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é principale de 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 (la clé principale de colonne est stockée dans Azure Key Vault.)

Cet exemple est similaire à celui ci-dessus ; seule différence est que la clé principale de colonne protégeant 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 table ne sera pas disponible pour les lectures et les écritures pendant 30 secondes (valeur spécifiée à l’aide du paramètre MaxDowntimeInSeconds.) Supposons que la clé principale de colonne, protégeant MyCEK, est stockée en dehors d’Azure (le passage d’un jeton Azure n’est pas obligatoire).

$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 : Appliquez des 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 base de données à l’aide du chiffrement sur place, à condition que toutes les conditions préalables pour le chiffrement sur place soient remplies, c’est-à-dire que la base de données dispose d’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 à SQL Azure DB et SQL Azure Managed Instance à l’aide d’un Service Principal ou d’un Managed Identity.

Le paramètre à utiliser peut être une chaîne représentant le jeton ou un objet PSAccessToken tel qu’il est retourné en exécutant Get-AzAccessToken -ResourceUrl https://database.windows.net.

Ce paramètre est nouveau dans v22 du module.

Type:PSObject
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-AllowVerboseLogging

Si elle est définie, l’applet de commande ajoute des messages détaillés au fichier journal (si le paramètre « LogFileDirectory » est défini) et conserve les fichiers dacpac utilisés par les bibliothèques sous-jacentes pour effectuer l’opération.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 conditions préalables : 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
Alias:AttestationProtocol
Valeurs acceptées:NotSpecified, AAS, None, HGS
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-EnclaveAttestationURL

Spécifie une URL d’attestation d’enclave pour le chiffrement sur place lors de l’utilisation d’Always Encrypted avec enclaves sécurisées. Obligatoire si enclaveAttestationProtocol a la valeur AAS ou HGS.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Encrypt

Type de chiffrement à utiliser lors de la connexion à SQL Server.

Cette valeur est mappée à la propriété EncryptSqlConnectionEncryptOption 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 v22 du module.

Type:String
Valeurs acceptées:Mandatory, Optional, Strict
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-HostNameInCertificate

Nom d’hôte à utiliser pour valider le certificat TLS/SSL SQL Server. Vous devez passer ce paramètre si votre instance SQL Server est activée pour Forcer le chiffrement et que vous souhaitez vous connecter à une instance à l’aide du nom d’hôte/shortname. Si ce paramètre est omis, le passage du nom de domaine complet (FQDN) à -ServerInstance est nécessaire pour se connecter à une instance SQL Server activée pour Forcer le chiffrement.

Ce paramètre est nouveau dans v22 du module.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-KeepCheckForeignKeyConstraints

Si elle est définie, la sémantique de vérification (CHECK ou NOCHECK) des contraintes de clé étrangère est conservée.

Sinon, s’il n’est pas défini et si UseOnlineApproach n’est pas défini, 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
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 principales de colonne protégeant les colonnes à chiffrer, déchiffrées ou rechiffrées, est stockée dans des coffres de clés dans Azure Key Vault.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-LockTimeoutInSeconds

Spécifie la durée maximale (en secondes) que 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 de -1 (valeur par défaut) indique qu’aucun délai d’expiration (c’est-à-dire attendre toujours). La valeur 0 signifie ne pas attendre du tout. Lorsqu’une attente d’un verrou dépasse la valeur de délai d’attente, une erreur est retournée. Valide uniquement si UseOnlineApproach est défini.

Type:Int32
Position:Named
Valeur par défaut:-1
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 principales de colonne protégeant les colonnes à chiffrer, déchiffrées ou rechiffrées est stockée dans des modules HSM managés dans Azure Key Vault.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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 pourra pas rattraper les modifications apportées dans la table source, et qu’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
Valeur par défaut:5
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:1800
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:3
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:100
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Path

Spécifie le chemin d’accès 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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ProgressAction

Détermine comment PowerShell répond aux mises à jour de progression générées par un script, une applet de commande ou un fournisseur, telles que les barres de progression générées par l’applet de commande Write-Progress. L’applet de commande Write-Progress crée des barres de progression qui affichent l’état d’une commande.

Type:ActionPreference
Alias:proga
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques: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
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-TrustServerCertificate

Indique si le canal sera chiffré lors du contournement de la marche à pied de 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 v22 du module.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-UseOnlineApproach

Si elle est définie, l’applet de commande utilise l’approche en ligne pour vous assurer que la base de données est disponible pour d’autres applications pour les lectures et les écritures pendant la plupart 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
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

Microsoft.SqlServer.Management.Smo.Database

Sorties

String