Set-SqlColumnEncryption

Verschlüsselt, entschlüsselt oder verschlüsselt angegebene Spalten in der Datenbank erneut.

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>]

Beschreibung

Das Cmdlet Set-SqlColumnEncryption verschlüsselt, entschlüsselt oder verschlüsselt die angegebenen Datenbankspalten mithilfe des features Always Encrypted erneut.

Das Cmdlet akzeptiert ein Array von SqlColumnEncryptionSettings-Objekten , von denen jedes die Zielverschlüsselungskonfiguration für eine Spalte in der Datenbank angibt.

Das Cmdlet verschlüsselt, entschlüsselt oder verschlüsselt jede angegebene Spalte je nach aktueller Verschlüsselungskonfiguration der Spalte und den angegebenen Zielverschlüsselungseinstellungen.

Das Cmdlet kommuniziert mit Schlüsselspeichern, die Spalten master Schlüssel enthalten. Wenn eine Spalte master Schlüssel zum Schutz der zu verschlüsselnden, entschlüsselten oder erneut verschlüsselten Spalten in Azure gespeichert wird, müssen Sie ein gültiges Authentifizierungstoken für einen Schlüsseltresor oder ein verwaltetes HSM angeben, das den Schlüssel enthält. Alternativ können Sie sich mit Add-SqlAzureAuthenticationContext bei Azure authentifizieren , bevor Sie dieses Cmdlet aufrufen.

Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.

Beispiele

Beispiel 1: Anwenden der angegebenen Zielverschlüsselungseinstellungen auf drei Datenbankspalten.

In diesem Beispiel wird die dbo.Student.Id Spalte mit deterministischer Verschlüsselung und dem Spaltenverschlüsselungsschlüssel namens MyCEKverschlüsselt.

Die dbo.Student.LastName Spalte wird mithilfe der randomisierten Verschlüsselung und des Spaltenverschlüsselungsschlüssels mit dem Namen MyCEKverschlüsselt.

Die dbo.StudentFirstName Spalte ist nicht verschlüsselt (wenn die Spalte zunächst verschlüsselt ist, wird sie entschlüsselt).

Im Beispiel wird der Offlineansatz verwendet, was bedeutet, dass die Student-Tabelle während des gesamten Vorgangs für Updates nicht verfügbar bleibt. Angenommen, die Spalte master Schlüssel, der schütztMyCEK, wird nicht in Azure Key Vault gespeichert.

$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 .

Beispiel 2: Anwenden der angegebenen Zielverschlüsselungseinstellungen auf die drei Datenbankspalten (Spalte master Schlüssel wird in Azure Key Vault gespeichert.)

Dieses Beispiel ähnelt dem obigen. Der Einzige Unterschied besteht darin, dass die Spalte master Schlüsselschutz MyCEK in Azure Key Vault gespeichert wird.

# 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

Beispiel 3: Anwenden der angegebenen Zielverschlüsselungseinstellungen auf drei Datenbankspalten mithilfe des Onlineansatzes.

In dieser Beispieltabelle Student ist für Lese- und Schreibvorgänge bis zu 30 Sekunden nicht verfügbar (der mit dem Parameter MaxDowntimeInSeconds angegebene Wert).) Angenommen, die Spalte master Schlüssel, der schütztMyCEK, wird außerhalb von Azure gespeichert (das Übergeben eines Azure-Tokens ist nicht erforderlich).

$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 .

Beispiel 4: Anwenden der Zielverschlüsselungseinstellungen auf mehrere Spalten mithilfe der direkten Verschlüsselung.

$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'

In diesem Beispiel werden die Zielverschlüsselungseinstellungen auf die Datenbankspalten mithilfe der direkten Verschlüsselung angewendet, sofern alle Voraussetzungen für die direkte Verschlüsselung erfüllt sind, d. h. die Datenbank eine Enclave aktiviert hat und die schlüssel, die in kryptografischen Vorgängen verwendet werden, die das Cmdlet auslöst, enclave-aktiviert sind.

Parameter

-AccessToken

Das Zugriffstoken, das zur Authentifizierung bei SQL Server verwendet wird, als Alternative zur Benutzer-/Kennwort- oder Windows-Authentifizierung.

Dies kann z. B. verwendet werden, um eine Verbindung mit SQL Azure DB und SQL Azure Managed Instance mithilfe Service Principal von herzustellen Managed Identity.

Der zu verwendende Parameter kann entweder eine Zeichenfolge sein, die das Token darstellt, oder ein PSAccessToken Objekt, das durch ausführen Get-AzAccessToken -ResourceUrl https://database.windows.netzurückgegeben wird.

Dieser Parameter ist neu in v22 des Moduls.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ColumnEncryptionSettings

Gibt ein Array von SqlColumnEncryptionSettings-Objekten an, die jeweils die Zielverschlüsselungskonfiguration für eine Spalte in der Datenbank angibt.

Type:SqlColumnEncryptionSettings[]
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-EnclaveAttestationProtocol

Gibt das Nachweisprotokoll einer Enclave für Always Encrypted mit sicheren Enclaves an. Dieser Parameter ist erforderlich, damit das Cmdlet kryptografische Vorgänge direkt in einer serverseitigen sicheren Enclave ausführen kann, um die Kosten für das Herunterladen und Hochladen der Daten zu erlischt. Beachten Sie, dass die direkte Verschlüsselung andere Voraussetzungen erfüllt: Für Ihre Datenbank muss eine Enclave konfiguriert sein, und Sie müssen kryptografische Schlüssel mit Enclave-Unterstützung verwenden.

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

Gibt eine Enclave-Nachweis-URL für die direkte Verschlüsselung an, wenn Always Encrypted mit sicheren Enclaves verwendet wird. Erforderlich, wenn EnclaveAttestationProtocol auf AAS oder HGSfestgelegt ist.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

Der Verschlüsselungstyp, der beim Herstellen einer Verbindung mit SQL Server verwendet werden soll.

Dieser Wert wird der Encrypt Eigenschaft SqlConnectionEncryptOption des SqlConnection-Objekts des Microsoft.Data.SqlClient-Treibers zugeordnet.

In v22 des Moduls ist Optional der Standardwert (aus Kompatibilität mit v21). In v23+ des Moduls lautet der Standardwert "Obligatorisch", wodurch möglicherweise eine Breaking Change für vorhandene Skripts entsteht.

Dieser Parameter ist neu in v22 des Moduls.

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

Der Hostname, der beim Überprüfen des TLS/SSL-Zertifikats von SQL Server verwendet werden soll. Sie müssen diesen Parameter übergeben, wenn Ihr SQL Server instance für Verschlüsselung erzwingen aktiviert ist und Sie eine Verbindung mit einer instance mithilfe von hostname/shortname herstellen möchten. Wenn dieser Parameter nicht angegeben wird, ist das Übergeben des vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) an -ServerInstance erforderlich, um eine Verbindung mit einem für Die Verschlüsselung erzwingen aktivierten SQL Server instance herzustellen.

Dieser Parameter ist neu in v22 des Moduls.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Gibt das SQL-Datenbankobjekt an, für das dieses Cmdlet den Vorgang ausführt.

Type:Database
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-KeepCheckForeignKeyConstraints

Wenn festgelegt, wird die Semantik (CHECK oder NOCHECK) von Fremdschlüsseleinschränkungen beibehalten.

Andernfalls werden Fremdschlüsseleinschränkungen immer mit der OPTION NOCHECK neu erstellt, wenn nicht festgelegt und UseOnlineApproach nicht festgelegt ist, um die Auswirkungen auf Anwendungen zu minimieren.

KeepCheckForeignKeyConstraints ist nur gültig, wenn UseOnlineApproach festgelegt ist.

Beim Offlineansatz bleibt die Semantik von Fremdschlüsseleinschränkungen immer erhalten.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

Gibt ein Zugriffstoken für Schlüsseltresore in Azure Key Vault an. Verwenden Sie diesen Parameter, wenn eine der Spalten master Schlüssel, die die zu verschlüsselnden, entschlüsselten oder erneut verschlüsselten Spalten schützen, in Schlüsseltresoren in Azure Key Vault gespeichert werden.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LockTimeoutInSeconds

Gibt die maximale Zeit (in Sekunden) an, die das Cmdlet auf Datenbanksperren wartet, die zum Starten der letzten Nachholiteration erforderlich sind. Ein Wert von -1 (Standard) gibt keinen Timeoutzeitraum an (d. a. warten Sie ewig). Ein Wert von 0 bedeutet, überhaupt nicht zu warten. Wenn die Wartezeit auf eine Sperre den Timeoutwert überschreitet, wird ein Fehler zurückgegeben. Nur gültig, wenn UseOnlineApproach festgelegt ist.

Type:Int32
Position:Named
Default value:-1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LogFileDirectory

Wenn festgelegt, erstellt das Cmdlet eine Protokolldatei im angegebenen Verzeichnis.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

Gibt ein Zugriffstoken für verwaltete HSMs in Azure Key Vault an. Verwenden Sie diesen Parameter, wenn master Spaltenschlüssel, die die zu verschlüsselnden, entschlüsselten oder erneut verschlüsselten Spalten schützen, auf verwalteten HSMs in Azure Key Vault gespeichert werden.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDivergingIterations

Gibt die maximale Anzahl aufeinanderfolgender Nachholiterationen an, bei denen die Anzahl der verarbeiteten Zeilen zunimmt. Wenn dieses Limit erreicht ist, geht das Cmdlet davon aus, dass es nicht in der Lage ist, die in der Quelltabelle vorgenommenen Änderungen aufzuholen, und es bricht den Vorgang ab und erstellt den ursprünglichen Zustand der Datenbank erneut. Nur gültig, wenn UseOnlineApproach festgelegt ist. Muss kleiner als der Wert von MaxIterations sein.

Type:Int32
Position:Named
Default value:5
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxDowntimeInSeconds

Gibt die maximale Zeit (in Sekunden) an, in der die Quelltabelle nicht für Lese- und Schreibvorgänge verfügbar ist. Nur gültig, wenn UseOnlineApproach festgelegt ist.

Type:Int32
Position:Named
Default value:1800
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterationDurationInDays

Gibt die maximale Zeit (in Tagen) des Seedings oder einer einzelnen Nachholiteration an. Wenn das Seeding oder eine Nachholiteration mehr als den angegebenen Wert benötigt, bricht das Cmdlet den Vorgang ab und erstellt den ursprünglichen Zustand der Datenbank erneut. Nur gültig, wenn UseOnlineApproach festgelegt ist.

Type:Int32
Position:Named
Default value:3
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxIterations

Gibt die maximale Anzahl von Iterationen in der Aufholphase an. Wenn dieser Grenzwert erreicht ist, bricht das Cmdlet den Vorgang ab und erstellt den ursprünglichen Zustand der Datenbank neu. Nur gültig, wenn UseOnlineApproach festgelegt ist.

Type:Int32
Position:Named
Default value:100
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Gibt den Pfad der SQL-Datenbank an, für die dieses Cmdlet den Vorgang ausführt. Wenn Sie keinen Wert für diesen Parameter angeben, verwendet das Cmdlet den aktuellen Arbeitsstandort.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Script

Gibt an, dass dieses Cmdlet ein Transact-SQL-Skript zurückgibt, das die Aufgabe ausführt, die dieses Cmdlet ausführt.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

Gibt an, ob der Kanal verschlüsselt wird, während das Durchlaufen der Zertifikatkette zur Überprüfung der Vertrauensstellung umgangen wird.

In v22 des Moduls ist $true der Standardwert (aus Kompatibilität mit v21). In v23+ des Moduls lautet der Standardwert "$false", wodurch möglicherweise eine Breaking Change für vorhandene Skripts entsteht.

Dieser Parameter ist neu in v22 des Moduls.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseOnlineApproach

Wenn festgelegt, verwendet das Cmdlet den Onlineansatz, um sicherzustellen, dass die Datenbank für andere Anwendungen für Lese- und Schreibvorgänge für die meiste Zeit des Vorgangs verfügbar ist.

Andernfalls sperrt das Cmdlet die betroffenen Tabellen, sodass sie für Updates für den gesamten Vorgang nicht verfügbar sind. Die Tabellen stehen für Lesevorgänge zur Verfügung.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

Microsoft.SqlServer.Management.Smo.Database

Ausgaben

String