Configurare Always Encrypted tramite PowerShell

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Il modulo SqlServer di PowerShell include i cmdlet per la configurazione di Always Encrypted in Database SQL di Azure o in SQL Server.

Considerazioni sulla sicurezza quando si usa PowerShell per configurare Always Encrypted

Poiché l'obiettivo principale di Always Encrypted è garantire la sicurezza dei dati sensibili crittografati anche se il sistema di database viene compromesso, l'esecuzione di uno script di PowerShell che elabora chiavi o dati sensibili nel computer SQL Server può ridurre o annullare i vantaggi della funzionalità. Per altre indicazioni relative alla sicurezza, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.

È possibile usare PowerShell per gestire chiavi Always Encrypted con e senza separazione dei ruoli offrendo il controllo su coloro che hanno accesso alle chiavi di crittografia effettive nell'archivio chiavi e coloro che hanno accesso al database.

Per altre indicazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.

Prerequisiti

Installare il modulo SqlServer di PowerShell versione 22.0.50 o successive in un computer protetto che NON sia il computer che ospita l'istanza di SQL Server. Il modulo può essere installato direttamente da PowerShell Gallery. Per altri dettagli, vedere le istruzioni di download.

Importazione del modulo SqlServer

Per caricare il modulo SqlServer:

  1. Usare il cmdlet Set-ExecutionPolicy per impostare i criteri di esecuzione degli script appropriati.
  2. Usare il cmdlet Import-Module per importare il modulo SqlServer.

Questo esempio carica il modulo SqlServer.

# Import the SQL Server Module.  
Import-Module "SqlServer" -MinimumVersion 22.0.50

Connessione a un database

Alcuni dei cmdlet Always Encrypted possono essere usati con dati o metadati del database e richiedono la connessione al database. Quando si configura Always Encrypted con il modulo SqlServer è consigliabile connettersi al database con i due metodi seguenti:

  1. Connettersi tramite il cmdlet Get-SqlDatabase.
  2. Connettersi tramite il provider SQL Server PowerShell.

Tramite Get-SqlDatabase

Il cmdlet Get-SqlDatabase consente di connettersi a un database in SQL Server o nel database SQL di Azure. Restituisce un oggetto di database, che può essere passato usando il parametro InputObject di un cmdlet che si connette al database.

Utilizzo di SQL Server PowerShell

# Import the SqlServer module
Import-Module "SqlServer" -MinimumVersion 22.0.50

# Connect to your database
# Set the valid server name, database name and authentication keywords in the connection string
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$database = Get-SqlDatabase -ConnectionString $connStr

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

In alternativa, è possibile usare il reindirizzamento:

$database | Get-SqlColumnMasterKey

Tramite il provider SQL Server PowerShell

Il provider SQL Server PowerShell espone la gerarchia degli oggetti SQL Server in percorsi simili ai percorsi del file system. Con SQL Server PowerShell è possibile spostarsi tra i percorsi usando alias di Windows PowerShell simili ai comandi normalmente usati per spostarsi tra i percorsi del file system. Dopo essere passati all'istanza di destinazione e al database, i cmdlet successivi vengono eseguiti nel database come illustrato nell'esempio seguente.

Nota

Questo metodo di connessione a un database si applica solo a SQL Server e non è supportato nel database SQL di Azure.

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey

In alternativa, è possibile specificare un percorso di database usando il parametro generico Path anziché passare al database.

# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

Attività Always Encrypted tramite PowerShell

Riferimento dei cmdlet di Always Encrypted

Per Always Encrypted sono disponibili i cmdlet di PowerShell seguenti:

CMDLET Descrizione
Add-SqlAzureAuthenticationContext Esegue l'autenticazione in Azure e acquisisce un token di autenticazione.
Add-SqlColumnEncryptionKeyValue Aggiunge un nuovo valore crittografato per un oggetto chiave di crittografia della colonna esistente nel database.
Complete-SqlColumnMasterKeyRotation Completa la rotazione di una chiave master della colonna.
Get-SqlColumnEncryptionKey Restituisce tutti gli oggetti chiave di crittografia della colonna definiti nel database oppure un solo oggetto chiave di crittografia della colonna con il nome specificato.
Get-SqlColumnMasterKey Restituisce tutti gli oggetti chiave master della colonna definiti nel database oppure un solo oggetto chiave master della colonna con il nome specificato.
Invoke-SqlColumnMasterKeyRotation Avvia la rotazione di una chiave master della colonna.
New-SqlAzureKeyVaultColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings che descrive una chiave asimmetrica archiviata nell'insieme di credenziali delle chiavi di Azure.
New-SqlCngColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings che descrive una chiave asimmetrica archiviata in un archivio chiavi che supporta l'API CNG (Cryptography Next Generation).
New-SqlColumnEncryptionKey Crea un oggetto chiave di crittografia della colonna nel database.
New-SqlColumnEncryptionKeyEncryptedValue Produce un valore crittografato di una chiave di crittografia della colonna.
New-SqlColumnEncryptionSettings Crea un oggetto SqlColumnEncryptionSettings che incapsula le informazioni sulla crittografia di una singola colonna, tra cui la chiave di crittografia della colonna e il tipo di crittografia.
New-SqlColumnMasterKey Crea un oggetto chiave master della colonna nel database.
New-SqlColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings per una chiave master della colonna con il provider specificato e il percorso della chiave.
New-SqlCspColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings che descrive una chiave asimmetrica archiviata in un archivio chiavi con un CSP (Cryptography Service Provider) che supporta l'API Cryptography (CAPI).
Remove-SqlColumnEncryptionKey Rimuove l'oggetto chiave di crittografia della colonna dal database.
Remove-SqlColumnEncryptionKeyValue Rimuove un valore crittografato da un oggetto chiave di crittografia della colonna esistente nel database.
Remove-SqlColumnMasterKey Rimuove l'oggetto chiave master della colonna dal database.
Set-SqlColumnEncryption Crittografa, decrittografa o ricrittografa le colonne specificate nel database.

Vedi anche