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 MyCEK
genannt wird.
Die dbo.Student.LastName
Spalte wird mit zufälliger Verschlüsselung und dem Spaltenverschlüsselungsschlüssel mit dem Namen MyCEK
verschlü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 MyCEK
schü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 MyCEK
schü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 Identity
verwendet 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.net
zurü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 HGS
festgelegt 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
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