Freigeben über


Set-SqlColumnEncryption

Verschlüsselt, entschlüsselt oder verschlüsselt die angegebenen 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>]
   [-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>]

Beschreibung

Die Set-SqlColumnEncryption Cmdlet verschlüsselt, entschlüsselt oder verschlüsselt mithilfe des Features "Immer verschlüsselt" angegebene Datenbankspalten erneut.

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

Das Cmdlet verschlüsselt, entschlüsselt oder verschlüsselt jede angegebene Spalte erneut, je nachdem, was die aktuelle Verschlüsselungskonfiguration der Spalte ist, und die angegebenen Zielverschlüsselungseinstellungen.

Das Cmdlet kommuniziert mit Schlüsselspeichern, die Spaltenmasterschlüssel enthalten. Wenn ein Spaltenmasterschlüssel, der die zu verschlüsselnden, entschlüsselten oder erneut verschlüsselten Spalten schützt, in Azure gespeichert ist, 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: Wenden Sie die angegebenen Zielverschlüsselungseinstellungen auf drei Datenbankspalten an.

In diesem Beispiel wird die dbo.Student.Id Spalte mit deterministischer Verschlüsselung und dem Spaltenverschlüsselungsschlüssel verschlüsselt, der MyCEKgenannt wird.

Die dbo.Student.LastName Spalte wird mit zufälliger Verschlüsselung und dem Spaltenverschlüsselungsschlüssel mit dem Namen MyCEKverschlüsselt.

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

Im Beispiel wird der Offlineansatz verwendet, was bedeutet, dass die Tabelle "Student" während des gesamten Vorgangs für Updates nicht verfügbar bleibt. Gehen Sie davon aus, dass der Spaltenmasterschlüssel, der MyCEKschützt, nicht in Azure Key Vault gespeichert ist.

$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 (Spaltenmasterschlüssel wird in Azure Key Vault gespeichert.)

Dieses Beispiel ähnelt dem obigen Beispiel. Nur der Unterschied besteht darin, dass der Spaltenmasterschlüssel, der MyCEK schützt, 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: Wenden Sie die angegebenen Zielverschlüsselungseinstellungen mithilfe des Onlineansatzes auf drei Datenbankspalten an.

In diesem Beispiel ist Student Tabelle für Lese- und Schreibvorgänge bis zu 30 Sekunden nicht verfügbar (der mit dem MaxDowntimeInSeconds Parameter angegebene Wert.) Gehen Sie davon aus, dass der Spaltenmasterschlüssel, der MyCEKschützt, außerhalb von Azure gespeichert wird (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 von 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, vorausgesetzt, alle Voraussetzungen für die direkte Verschlüsselung erfüllt sind, d. h., die Datenbank verfügt über eine Enklave und die Schlüssel, die in kryptografischen Vorgängen verwendet werden, die vom Cmdlet ausgelöst werden, sind enklavenfähig.

Parameter

-AccessToken

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

Dies kann z. B. zum Herstellen einer Verbindung mit SQL Azure DB und SQL Azure Managed Instance mithilfe eines Service Principal oder einer Managed Identityverwendet werden.

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

Dieser Parameter ist neu in v22 des Moduls.

Typ:PSObject
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-AllowVerboseLogging

Wenn festgelegt, fügt das Cmdlet ausführliche Meldungen zur Protokolldatei hinzu (wenn der Parameter "LogFileDirectory" festgelegt ist) und behält die dacpac-Dateien bei, die von den zugrunde liegenden Bibliotheken zum Ausführen des Vorgangs verwendet werden.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ColumnEncryptionSettings

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

Typ:SqlColumnEncryptionSettings[]
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-EnclaveAttestationProtocol

Gibt das Nachweisprotokoll einer Enklave für Always Encrypted mit sicheren Enklaven an. Dieser Parameter ist erforderlich, damit das Cmdlet kryptografische Vorgänge direkt in einer serverseitigen sicheren Enklave ausführt, um die Kosten für das Herunterladen und Hochladen der Daten zu leeren. Beachten Sie, dass die direkte Verschlüsselung andere Voraussetzungen hat: Ihre Datenbank muss eine Enklave konfiguriert haben, und Sie müssen Enklavenfähige kryptografische Schlüssel verwenden.

Typ:SqlConnectionAttestationProtocol
Aliase:AttestationProtocol
Zulässige Werte:NotSpecified, AAS, None, HGS
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-EnclaveAttestationURL

Gibt eine Enklavennachweis-URL für die direkte Verschlüsselung an, wenn Sie Always Encrypted mit sicheren Enklaven verwenden. Erforderlich, wenn EnclaveAttestationProtocol auf AAS oder HGSfestgelegt ist.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Encrypt

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

Dieser Wert ist der Encrypt Eigenschaft SqlConnectionEncryptOption für das SqlConnection-Objekt des Microsoft.Data.SqlClient-Treibers zugeordnet.

In v22 des Moduls ist die Standardeinstellung Optional (aus Kompatibilität mit v21). In v23+ des Moduls lautet der Standardwert "Verpflichtend", wodurch für vorhandene Skripts eine bahnbrechende Änderung erstellt werden kann.

Dieser Parameter ist neu in v22 des Moduls.

Typ:String
Zulässige Werte:Mandatory, Optional, Strict
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-HostNameInCertificate

Der Hostname, der beim Überprüfen des SQL Server TLS/SSL-Zertifikats verwendet werden soll. Sie müssen diesen Parameter übergeben, wenn Ihre SQL Server-Instanz für die Erzwingungsverschlüsselung aktiviert ist und Sie eine Verbindung mit einer Instanz mit 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 einer SQL Server-Instanz herzustellen, die für die Erzwingungsverschlüsselung aktiviert ist.

Dieser Parameter ist neu in v22 des Moduls.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-InputObject

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

Typ:Database
Position:1
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-KeepCheckForeignKeyConstraints

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

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

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

Bei der Offline-Methode wird die Semantik der Fremdschlüsseleinschränkungen immer beibehalten.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-KeyVaultAccessToken

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LockTimeoutInSeconds

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

Typ:Int32
Position:Named
Standardwert:-1
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LogFileDirectory

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ManagedHsmAccessToken

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

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxDivergingIterations

Gibt die maximale Anzahl aufeinander folgender Nachhol iterationen an, wobei die Anzahl der verarbeiteten Zeilen zunimmt. Wenn dieser Grenzwert erreicht ist, geht das Cmdlet davon aus, dass es nicht in der Lage ist, die in der Quelltabelle vorgenommenen Änderungen aufzuholen, und er 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 MaxIterationssein.

Typ:Int32
Position:Named
Standardwert:5
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxDowntimeInSeconds

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

Typ:Int32
Position:Named
Standardwert:1800
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxIterationDurationInDays

Gibt die maximale Zeit (in Tagen) des Seedings oder einer einzelnen Nachhol iteration an. Wenn das Seeding oder eine Nachhol iteration mehr als der angegebene 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.

Typ:Int32
Position:Named
Standardwert:3
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-MaxIterations

Gibt die maximale Anzahl von Iterationen in der Nachholphase 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.

Typ:Int32
Position:Named
Standardwert:100
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren: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 Arbeitsspeicherort.

Typ:String
Position:1
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ProgressAction

Bestimmt, wie PowerShell auf Statusaktualisierungen reagiert, die von einem Skript, Cmdlet oder Anbieter generiert werden, z. B. auf die Statusanzeigen, die vom Cmdlet Write-Progress generiert werden. Das Cmdlet Write-Progress erstellt Statusanzeigen, die den Status eines Befehls anzeigen.

Typ:ActionPreference
Aliase:proga
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Script

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

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-TrustServerCertificate

Gibt an, ob der Kanal verschlüsselt wird, während die Zertifikatkette umgangen wird, um die Vertrauensstellung zu überprüfen.

In v22 des Moduls ist die Standardeinstellung $true (aus Kompatibilität mit v21). In v23+ des Moduls lautet der Standardwert "$false", wodurch möglicherweise eine änderung für vorhandene Skripts geändert wird.

Dieser Parameter ist neu in v22 des Moduls.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-UseOnlineApproach

Wenn festgelegt, verwendet das Cmdlet den Onlineansatz, um sicherzustellen, dass die Datenbank für andere Anwendungen sowohl lese- als auch schreibgeschützt für den größten Teil des Vorgangs verfügbar ist.

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

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

Microsoft.SqlServer.Management.Smo.Database

Ausgaben

String