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:
- Usare il cmdlet Set-ExecutionPolicy per impostare i criteri di esecuzione degli script appropriati.
- 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:
- Connettersi tramite il cmdlet Get-SqlDatabase.
- 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
- Effettuare il provisioning di chiavi Always Encrypted con PowerShell
- Ruotare le chiavi Always Encrypted tramite PowerShell
- Crittografare, crittografare nuovamente o decrittografare colonne con 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. |