Set-SqlColumnEncryption
Crittografa, decrittografa o ricrittografa le colonne specificate nel database.
Sintassi
ByObject
Set-SqlColumnEncryption
[-InputObject] <Database>
-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]
[-DisableFallBackToClientSide]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
ByPath
Set-SqlColumnEncryption
[[-Path] <String>]
-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]
[-DisableFallBackToClientSide]
[-Script]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Descrizione
Il cmdlet Set-SqlColumnEncryption crittografa, decrittografa o crittografa nuovamente le colonne di database specificate usando la funzionalità Always Encrypted.
Il cmdlet accetta una matrice di oggetti SqlColumnEncryptionSettings , ognuno dei quali specifica la configurazione della crittografia di destinazione per una colonna nel database.
Il cmdlet crittograferà, decrittograferà o crittograferà nuovamente ogni colonna specificata, a seconda della configurazione di crittografia corrente della colonna e delle impostazioni di crittografia di destinazione specificate.
Il cmdlet comunica con gli archivi chiavi che contengono chiavi master delle colonne. Se una chiave master della colonna che protegge le colonne da crittografare, decrittografare o crittografare nuovamente, viene archiviata in Azure, è necessario specificare un token di autenticazione valido per un insieme di credenziali delle chiavi o un modulo di protezione hardware gestito che contiene la chiave. In alternativa, è possibile eseguire l'autenticazione in Azure con Add-SqlAzureAuthenticationContext prima di chiamare questo cmdlet.
Module requirements: version 21+ on PowerShell 5.1; version 22+ on PowerShell 7.x.
Esempio
Esempio 1: applicare le impostazioni di crittografia di destinazione specificate a tre colonne di database.
In questo esempio la dbo.Student.Id colonna viene crittografata usando la crittografia deterministica e la chiave di crittografia della colonna denominata MyCEK.
La dbo.Student.LastName colonna viene crittografata usando la crittografia casuale e la chiave di crittografia della colonna denominata MyCEK.
La dbo.StudentFirstName colonna non è crittografata (se la colonna è inizialmente crittografata, viene decrittografata).
L'esempio usa l'approccio offline, il che significa che la tabella Student rimarrà non disponibile per gli aggiornamenti durante l'operazione.
Si supponga che la chiave master della colonna, che protegge MyCEK, non sia archiviata in 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 .
Esempio 2: applicare le impostazioni di crittografia di destinazione specificate alle tre colonne di database (la chiave master della colonna viene archiviata in Azure Key Vault).
Questo esempio è simile a quello precedente; solo la differenza è che la chiave master della colonna che protegge MyCEK è archiviata in 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
Esempio 3: applicare le impostazioni di crittografia di destinazione specificate a tre colonne di database usando l'approccio online.
In questa tabella di esempio Student non sarà disponibile per letture e scritture per un massimo di 30 secondi (il valore specificato usando il parametro MaxDowntimeInSeconds ). Si supponga che la chiave master della colonna, che protegge MyCEK, venga archiviata all'esterno di Azure (il passaggio di un token di Azure non è obbligatorio).
$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 .
Esempio 4: applicare le impostazioni di crittografia di destinazione a più colonne usando la crittografia sul posto.
$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 questo esempio vengono applicate le impostazioni di crittografia di destinazione alle colonne del database che usano la crittografia sul posto, purché vengano soddisfatti tutti i prerequisiti per la crittografia sul posto, ovvero il database ha un enclave abilitato e le chiavi usate nelle operazioni di crittografia, che i trigger del cmdlet, sono abilitati per l'enclave.
Parametri
-AccessToken
Token di accesso usato per eseguire l'autenticazione a SQL Server, come alternativa all'autenticazione utente/password o windows.
Può essere usato, ad esempio, per connettersi a SQL Azure DB e SQL Azure Managed Instance usando un Service Principal oggetto o .Managed Identity
Il parametro da usare può essere una stringa che rappresenta il token o un PSAccessToken oggetto restituito eseguendo Get-AzAccessToken -ResourceUrl https://database.windows.net.
Questo parametro è nuovo nella versione 22 del modulo.
Proprietà dei parametri
| Tipo: | PSObject |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-AllowVerboseLogging
Se impostato, il cmdlet aggiungerà messaggi dettagliati al file di log (se il parametro 'LogFileDirectory' è impostato) e manterrà i file dacpac usati dalle librerie sottostanti per eseguire l'operazione.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-ColumnEncryptionSettings
Specifica una matrice di oggetti SqlColumnEncryptionSettings , ognuno dei quali specifica la configurazione della crittografia di destinazione per una colonna nel database.
Proprietà dei parametri
| Tipo: | SqlColumnEncryptionSettings[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-DisableFallBackToClientSide
Quando si specifica questo parametro, il cmdlet genera un errore con un messaggio di errore appropriato se l'operazione non è idonea per la modalità sul posto invece di eseguire automaticamente il fallback alla modalità lato client della crittografia.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-EnclaveAttestationProtocol
Specifica il protocollo di attestazione di un enclave per Always Encrypted con enclave sicuri. Questo parametro è necessario affinché il cmdlet esegua operazioni di crittografia sul posto, all'interno di un enclave sicuro lato server, per annullare la spesa per il download e il caricamento dei dati. Si noti che la crittografia sul posto include altri prerequisiti: il database deve avere un enclave configurato ed è necessario usare chiavi di crittografia abilitate per l'enclave.
Proprietà dei parametri
| Tipo: | SqlConnectionAttestationProtocol |
| Valore predefinito: | None |
| Valori accettati: | NotSpecified, AAS, None, HGS |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | AttestationProtocol |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-EnclaveAttestationURL
Specifica un URL di attestazione dell'enclave per la crittografia sul posto quando si usa Always Encrypted con enclave sicuri. Obbligatorio se EnclaveAttestationProtocol è impostato su AAS o HGS.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Encrypt
Tipo di crittografia da usare per la connessione a SQL Server.
Questo valore esegue il Encrypt mapping alla proprietà SqlConnectionEncryptOption nell'oggetto SqlConnection del driver Microsoft.Data.SqlClient.
Nella versione 22 del modulo, l'impostazione predefinita è Optional (per compatibilità con v21). Nella versione 23+ del modulo, il valore predefinito sarà "Obbligatorio", che potrebbe creare una modifica di rilievo per gli script esistenti.
Questo parametro è nuovo nella versione 22 del modulo.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Valori accettati: | Mandatory, Optional, Strict |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-HostNameInCertificate
Nome host da usare per la convalida del certificato TLS/SSL di SQL Server. È necessario passare questo parametro se l'istanza di SQL Server è abilitata per Forza crittografia e si vuole connettersi a un'istanza usando nome host/nome breve. Se questo parametro viene omesso, è necessario passare il nome di dominio completo (FQDN) a -ServerInstance per connettersi a un'istanza di SQL Server abilitata per Forza crittografia.
Questo parametro è nuovo nella versione 22 del modulo.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-InputObject
Specifica l'oggetto di database SQL per il quale questo cmdlet esegue l'operazione.
Proprietà dei parametri
| Tipo: | Database |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
ByObject
| Posizione: | 1 |
| Obbligatorio: | True |
| Valore dalla pipeline: | True |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-KeepCheckForeignKeyConstraints
Se impostata, la semantica di controllo (CHECK o NOCHECK) dei vincoli di chiave esterna viene mantenuta.
In caso contrario, se non è impostato e se UseOnlineApproach non è impostato, i vincoli di chiave esterna vengono sempre ricreati con l'opzione NOCHECK per ridurre al minimo l'impatto sulle applicazioni.
KeepCheckForeignKeyConstraints è valido solo quando è impostato UseOnlineApproach.
Con l'approccio offline, la semantica dei vincoli di chiave esterna viene sempre mantenuta.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-KeyVaultAccessToken
Specifica un token di accesso per gli insiemi di credenziali delle chiavi in Azure Key Vault. Usare questo parametro se una delle chiavi master della colonna che protegge le colonne da crittografare, decrittografare o crittografare nuovamente, viene archiviata negli insiemi di credenziali delle chiavi in Azure Key Vault.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LockTimeoutInSeconds
Specifica il tempo massimo ( in secondi) di attesa del cmdlet per i blocchi del database necessari per avviare l'ultima iterazione di recupero. Un valore di -1 (impostazione predefinita) indica un periodo di timeout (ovvero attendere per sempre). Il valore 0 indica di non attendere affatto. Quando un'attesa per un blocco supera il valore di timeout, viene restituito un errore. Valido solo se UseOnlineApproach è impostato.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | -1 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LogFileDirectory
Se impostato, il cmdlet creerà un file di log nella directory specificata.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-ManagedHsmAccessToken
Specifica un token di accesso per i moduli di protezione hardware gestiti in Azure Key Vault. Usare questo parametro se una delle chiavi master della colonna che proteggono le colonne da crittografare, decrittografare o crittografare nuovamente, viene archiviata in moduli di protezione hardware gestiti in Azure Key Vault.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MaxDivergingIterations
Specifica il numero massimo di iterazioni di recupero consecutive, in cui aumenta il numero di righe elaborate. Quando viene raggiunto questo limite, il cmdlet presuppone che non sarà in grado di recuperare le modifiche apportate nella tabella di origine e interrompe l'operazione e ricrea lo stato originale del database. Valido solo se UseOnlineApproach è impostato. Deve essere minore del valore di MaxIterations.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | 5 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MaxDowntimeInSeconds
Specifica il tempo massimo , espresso in secondi, durante il quale la tabella di origine non sarà disponibile per le letture e le scritture. Valido solo se UseOnlineApproach è impostato.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | 300 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MaxIterationDurationInDays
Specifica il tempo massimo ,in giorni, del seeding o di una singola iterazione di recupero. Se il seeding o un'iterazione di recupero richiede più del valore specificato, il cmdlet interrompe l'operazione e ricrea lo stato originale del database. Valido solo se UseOnlineApproach è impostato.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | 3 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MaxIterations
Specifica il numero massimo di iterazioni nella fase di recupero. Quando viene raggiunto questo limite, il cmdlet interrompe l'operazione e ricrea lo stato originale del database. Valido solo se UseOnlineApproach è impostato.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | 100 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Path
Specifica il percorso del database SQL per il quale questo cmdlet esegue l'operazione. Se non si specifica un valore per questo parametro, il cmdlet usa la posizione di lavoro corrente.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
ByPath
| Posizione: | 1 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Script
Indica che questo cmdlet restituisce un Transact-SQL script che esegue l'attività eseguita da questo cmdlet.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-TrustServerCertificate
Indica se il canale verrà crittografato durante il bypass della catena di certificati per convalidare l'attendibilità.
Nella versione 22 del modulo, l'impostazione predefinita è $true (per compatibilità con v21). Nella versione 23+ del modulo, il valore predefinito sarà "$false", che potrebbe creare una modifica di rilievo per gli script esistenti.
Questo parametro è nuovo nella versione 22 del modulo.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-UseOnlineApproach
Se impostato, il cmdlet userà l'approccio online per assicurarsi che il database sia disponibile per altre applicazioni sia per le letture che per le scritture per la maggior parte della durata dell'operazione.
In caso contrario, il cmdlet bloccherà le tabelle interessate, rendendole non disponibili per gli aggiornamenti per l'intera operazione. Le tabelle saranno disponibili per le letture.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.