Configurare Always Encrypted tramite PowerShellConfigure Always Encrypted using PowerShell

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Il modulo PowerShell SqlServer include i cmdlet per la configurazione di Always Encrypted nel database SQL di Azure e in SQL Server 2016.The SqlServer PowerShell module provides cmdlets for configuring Always Encrypted in both Azure SQL Database and SQL Server 2016.

I cmdlet di Always Encrypted nel modulo SqlServer usano chiavi o dati sensibili. È quindi importante eseguire i cmdlet in un computer protetto.Always Encrypted cmdlets in the SqlServer module work with keys or sensitive data, so it is important that you run the cmdlets on a secure computer. Durante la gestione di Always Encrypted eseguire i cmdlet da un computer diverso da quello che ospita l'istanza di SQL Server.When managing Always Encrypted, execute the cmdlets from a different computer than the computer hosting your SQL Server instance.

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à.Because the primary goal of Always Encrypted is to ensure encrypted sensitive data is safe, even if the database system gets compromised, executing a PowerShell script that processes keys or sensitive data on the SQL Server computer can reduce or defeat the benefits of the feature. Per altre indicazioni relative alla sicurezza, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.For additional security-related recommendations, see Security Considerations for Key Management.

I collegamenti ai singoli articoli dei cmdlet sono presenti alla fine di questa pagina.Links to the individual cmdlet articles are at the bottom of this page.

PrerequisitiPrerequisites

Installare il modulo SqlServer in un computer protetto che NON sia il computer che ospita l'istanza di SQL Server.Install the SqlServer module on a secure computer that is NOT a computer hosting your SQL Server instance. Il modulo può essere installato direttamente da PowerShell Gallery.The module can be installed directly from the PowerShell gallery. Per altri dettagli, vedere le istruzioni di download.See the download instructions for more details.

Importazione del modulo SqlServer Importing the SqlServer Module

Per caricare il modulo SqlServer:To load the SqlServer module:

  1. Usare il cmdlet Set-ExecutionPolicy per impostare i criteri di esecuzione degli script appropriati.Use the Set-ExecutionPolicy cmdlet to set the appropriate script execution policy.
  2. Usare il cmdlet Import-Module per importare il modulo SqlServer.Use the Import-Module cmdlet to import the SqlServer module.

Questo esempio carica il modulo SqlServer.This example loads the SqlServer module.

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

Connessione a un database Connecting to a Database

Alcuni dei cmdlet Always Encrypted possono essere usati con dati o metadati del database e richiedono la connessione al database.Some of the Always Encrypted cmdlets work with data or metadata in the database and require that you connect to the database first. Quando si configura Always Encrypted con il modulo SqlServer è consigliabile connettersi al database con i due metodi seguenti:There are two recommended methods of connecting to a database when configuring Always Encrypted using the SqlServer module:

  1. Connettersi usando SQL Server PowerShell.Connect using SQL Server PowerShell.
  2. Connettersi usando SQL Server Management Objects (SMO).Connect using SQL Server Management Objects (SMO).

Utilizzo di SQL Server PowerShellUsing SQL Server PowerShell

Questo metodo si applica solo a SQL Server e non è supportato nel database SQL di Azure.This method works only for SQL Server (it is not supported in Azure SQL Database).

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.With SQL Server PowerShell, you can navigate the paths using Windows PowerShell aliases similar to the commands you typically use to navigate file system paths. Dopo essere passati all'istanza di destinazione e al database, i cmdlet successivi vengono eseguiti nel database come illustrato nell'esempio seguente:Once you navigate to the target instance and the database, the subsequent cmdlets target that database, as shown in the following example:

# Import the SqlServer module.
Import-Module "SqlServer"
# 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.Alternatively, you can specify a database path using the generic Path parameter, instead of navigating to the database.

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

Utilizzo di SMOUsing SMO

Questo metodo si applica al database SQL di Azure e a SQL Server.This method works for both Azure SQL Database and SQL Server. Con SMO, è possibile creare un oggetto di classe Databasee quindi passare l'oggetto usando il parametro InputObject di un cmdlet che si connette al database.With SMO, you can create an object of the Database Class, and then pass the object using the InputObject parameter of a cmdlet that connects to the database.

# Import the SqlServer module
Import-Module "SqlServer"  

# Connect to your database (Azure SQL database).
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName] 

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

In alternativa, è possibile usare il reindirizzamento:Alternatively, you can use piping:

$database | Get-SqlColumnMasterKey

Attività Always Encrypted tramite PowerShellAlways Encrypted Tasks using PowerShell

Riferimento dei cmdlet di Always Encrypted Always Encrypted Cmdlet Reference

Per Always Encrypted sono disponibili i cmdlet di PowerShell seguenti:The following PowerShell cmdlets are available for Always Encrypted:

CMDLETCMDLET DescrizioneDescription
Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Esegue l'autenticazione in Azure e acquisisce un token di autenticazione.Performs authentication to Azure and acquires an authentication token.
Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue Aggiunge un nuovo valore crittografato per un oggetto chiave di crittografia della colonna esistente nel database.Adds a new encrypted value for an existing column encryption key object in the database.
Complete-SqlColumnMasterKeyRotationComplete-SqlColumnMasterKeyRotation Completa la rotazione di una chiave master della colonna.Completes the rotation of a column master key
Get-SqlColumnEncryptionKeyGet-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.Returns all column encryption key objects defined in the database, or returns one column encryption key object with the specified name.
Get-SqlColumnMasterKeyGet-SqlColumnMasterKey Restituisce tutti gli oggetti chiave master della colonna definiti nel database oppure un solo oggetto chiave master della colonna con il nome specificato.Returns the column master key objects defined in the database, or returns one column master key object with the specified name.
Invoke-SqlColumnMasterKeyRotationInvoke-SqlColumnMasterKeyRotation Avvia la rotazione di una chiave master della colonna.Initiates the rotation of a column master key.
New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings che descrive una chiave asimmetrica archiviata nell'insieme di credenziali delle chiavi di Azure.Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in Azure Key Vault.
New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings che descrive una chiave asimmetrica archiviata in un archivio chiavi che supporta l'API CNG (Cryptography Next Generation).Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store supporting the Cryptography Next Generation (CNG) API.
New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey Crea un oggetto chiave di crittografia della colonna nel database.Creates a column encryption key object in the database.
New-SqlColumnEncryptionKeyEncryptedValueNew-SqlColumnEncryptionKeyEncryptedValue Produce un valore crittografato di una chiave di crittografia della colonna.Produces an encrypted value of a column encryption key.
New-SqlColumnEncryptionSettingsNew-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.Creates a SqlColumnEncryptionSettings object that encapsulates information about a single column’s encryption, including CEK and encryption type.
New-SqlColumnMasterKeyNew-SqlColumnMasterKey Crea un oggetto chiave master della colonna nel database.Creates a column master key object in the database.
New-SqlColumnMasterKeySettingsNew-SqlColumnMasterKeySettings Crea un oggetto SqlColumnMasterKeySettings per una chiave master della colonna con il provider specificato e il percorso della chiave.Creates a SqlColumnMasterKeySettings object for a column master key with the specified provider and key path.
New-SqlCspColumnMasterKeySettingsNew-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).Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store with a Cryptography Service Provider (CSP) supporting Cryptography API (CAPI).
Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey Rimuove l'oggetto chiave di crittografia della colonna dal database.Removes the column encryption key object from the database.
Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue Rimuove un valore crittografato da un oggetto chiave di crittografia della colonna esistente nel database.Removes an encrypted value from an existing column encryption key object in the database.
Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey Rimuove l'oggetto chiave master della colonna dal database.Removes the column master key object from the database.
Set-SqlColumnEncryptionSet-SqlColumnEncryption Crittografa, decrittografa o ricrittografa le colonne specificate nel database.Encrypts, decrypts, or re-encrypts specified columns in the database.

Risorse aggiuntiveAdditional Resources