Configurare le chiavi di Always Encrypted con PowerShellConfigure Always Encrypted Keys using PowerShell

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo articolo sono descritti i passaggi per effettuare il provisioning delle chiavi per Always Encrypted usando il modulo PowerShell SqlServer.This article provides the steps to provision keys for Always Encrypted using the SqlServer PowerShell module. È possibile usare PowerShell per effettuare il provisioning di chiavi Always Encrypted con e senza separazione dei ruolioffrendo il controllo su coloro che hanno accesso alle chiavi di crittografia effettive nell'archivio chiavi e coloro che hanno accesso al database.You can use PowerShell to provision Always Encrypted keys both with and without role separation, providing control over who has access to the actual encryption keys in the key store, and who has access to the database.

Per una panoramica della gestione delle chiavi Always Encrypted, incluse alcune procedure consigliate, vedere Panoramica della gestione delle chiavi per Always Encrypted.For an overview of Always Encrypted key management, including some high-level best practice recommendations, see Overview of Key Management for Always Encrypted. Per informazioni su come usare il modulo PowerShell SqlServer per Always Encrypted, vedere Configurare Always Encrypted tramite PowerShell.For information about how to start using the SqlServer PowerShell module for Always Encrypted, see Configure Always Encrypted using PowerShell.

Provisioning delle chiavi senza separazione dei ruoliKey Provisioning without Role Separation

Il metodo di provisioning delle chiavi descritto in questa sezione non supporta la separazione dei ruoli tra amministratori della sicurezza e amministratori di database.The key provisioning method described in this section does not support role separation between Security Administrators and DBAs. Alcuni dei passaggi che seguono includono operazioni sulle chiavi fisiche e operazioni sui metadati delle chiavi.Some of the below steps combine operations on physical keys with operations on key metadata. Per questa ragione, questo metodo di provisioning delle chiavi è consigliato per le organizzazioni che usano il modello DevOps oppure se il database è ospitato nel cloud e l'obiettivo principale consiste nel limitare l'accesso ai dati sensibili agli amministratori del cloud escludendo gli amministratori di database locali.Therefore, this method of provisioning the keys is recommended for organizations using the DevOps model, or if the database is hosted in the cloud and the primary goal is to restrict cloud administrators (but not on-premises DBAs), from accessing sensitive data. Questo metodo non è consigliato nel caso in cui eventuali concorrenti includano amministratori di database oppure se semplicemente gli amministratori di database non devono avere accesso ai dati sensibili.It is not recommended if potential adversaries include DBAs, or if DBAs should simply not have access to sensitive data.

Prima di eseguire passaggi che implicano l'accesso a chiavi di testo non crittografato o all'archivio chiavi (indicati nella colonna Accede a chiavi di testo non crittografato/archivio chiavi della tabella che segue), assicurarsi che l'ambiente PowerShell venga eseguito in un computer protetto diverso dal computer che ospita il database.Before running any steps that involves access to plaintext keys or the key store (identified in the Accesses plaintext keys/key store column in the below table), make sure that the PowerShell environment runs on a secure machine that is different from a computer hosting your database. Per altre informazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.For more information, see Security Considerations for Key Management.

AttivitàTask ArticoloArticle Accede alle chiavi in testo non crittografato o all'archivio delle chiaviAccesses plaintext keys/key store Accede al databaseAccesses database
Passaggio 1.Step 1. Creare una chiave master della colonna in un archivio chiavi.Create a column master key in a key store.

Nota: il modulo PowerShell SqlServer non supporta questo passaggio.Note: The SqlServer PowerShell module does not support this step. Per eseguire questa attività da una riga di comando, usare gli strumenti specifici dell'archivio chiavi selezionato.To accomplish this task from a command-line, use the tools that are specific to your selected key store.
Creare e archiviare chiavi master della colonna (Always Encrypted)Create and Store Column Master Keys (Always Encrypted) Yes NoNo
Passaggio 2.Step 2. Avviare un ambiente PowerShell e importare il modulo PowerShell SqlServer.Start a PowerShell environment and import the SqlServer PowerShell module. Configurare Always Encrypted tramite PowerShellConfigure Always Encrypted using PowerShell NoNo NoNo
Passaggio 3.Step 3. Connettersi al server e al database.Connect to your server and database. Connessione a un databaseConnect to a Database NoNo Yes
Passaggio 4.Step 4. Creare un oggetto SqlColumnMasterKeySettings che includa informazioni sul percorso della chiave master della colonna.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings è un oggetto presente in memoria (PowerShell).SqlColumnMasterKeySettings is an object that exists in memory (in PowerShell). Usare il cmdlet specifico dell'archivio chiavi.Use the cmdlet that is specific to your key store. New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings

New-SqlCertificateStoreColumnMasterKeySettingsNew-SqlCertificateStoreColumnMasterKeySettings

New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings

New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
NoNo NoNo
Passaggio 5.Step 5. Creare i metadati relativi alla chiave master della colonna nel database.Create the metadata about the column master key in your database. New-SqlColumnMasterKeyNew-SqlColumnMasterKey

Nota: il cmdlet genera l'istruzione CREATE COLUMN MASTER KEY (Transact-SQL) per creare i metadati della chiave.Note: under the covers, the cmdlet issues the CREATE COLUMN MASTER KEY (Transact-SQL) statement to create key metadata.
NoNo Yes
Passaggio 6.Step 6. Eseguire l'autenticazione in Azure, se la chiave master della colonna è archiviata nell'insieme di credenziali delle chiavi di Azure.Authenticate to Azure, if your column master key is stored in Azure Key Vault. Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Yes NoNo
Passaggio 7.Step 7. Generare una nuova chiave di crittografia della colonna, crittografarla con la chiave master della colonna e creare i metadati della chiave di crittografia della colonna nel database.Generate a new column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey

Nota: usare una variante del cmdlet che genera internamente e crittografa una chiave di crittografia della colonna.Note: Use a variation of the cmdlet that internally generates and encrypts a column encryption key.

Nota: il cmdlet genera l'istruzione CREATE COLUMN ENCRYPTION KEY (Transact-SQL) per creare i metadati della chiave.Note: Under the covers, the cmdlet issues the CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement to create key metadata.
Yes Yes

Archivio certificati Windows senza separazione dei ruoli (esempio)Windows Certificate Store without Role Separation (Example)

Questo script è un esempio end-to-end di generazione di una chiave master della colonna che è un certificato nell'archivio certificati di Windows, di generazione e crittografia di una chiave di crittografia della colonna e di creazione dei metadati della chiave in un database di SQL Server.This script is an end-to-end example for generating a column master key that is a certificate in Windows Certificate Store, generating and encrypting a column encryption key, and creating key metadata in a SQL Server database.

# Create a column master key in Windows Certificate Store.
$cert1 = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module.
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$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]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert1.Thumbprint

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings


# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName  -InputObject $database -ColumnMasterKey $cmkName

Insieme di credenziali delle chiavi di Azure senza separazione dei ruoli (esempio)Azure Key Vault without Role Separation (Example)

Questo script è un esempio end-to-end di provisioning e configurazione di un insieme di credenziali delle chiavi di Azure, di generazione di una chiave master della colonna nell'insieme di credenziali, di generazione e crittografia di una chiave di crittografia della colonna e di creazione dei metadati della chiave in un database SQL di Azure.This script is an end-to-end example for provisioning and configuring an Azure Key Vault, generating a column master key in the vault, generating and encrypting a column encryption key, and creating key metadata in an Azure SQL database.

# Create a column master key in Azure Key Vault.
Login-AzureRmAccount
$SubscriptionId = "<Azure SubscriptionId>"
$resourceGroup = "<resource group name>"
$azureLocation = "<datacenter location>"
$akvName = "<key vault name>"
$akvKeyName = "<key name>"
$azureCtx = Set-AzureRMConteXt -SubscriptionId $SubscriptionId # Sets the context for the below cmdlets to the specified subscription.
New-AzureRmResourceGroup –Name $resourceGroup –Location $azureLocation # Creates a new resource group - skip, if you desire group already exists.
New-AzureRmKeyVault -VaultName $akvName -ResourceGroupName $resourceGroup -Location $azureLocation # Creates a new key vault - skip if your vault already exists.
Set-AzureRmKeyVaultAccessPolicy -VaultName $akvName -ResourceGroupName $resourceGroup -PermissionsToKeys get, create, delete, list, update, import, backup, restore, wrapKey,unwrapKey, sign, verify -UserPrincipalName $azureCtx.Account
$akvKey = Add-AzureKeyVaultKey -VaultName $akvName -Name $akvKeyName -Destination "Software"

# 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] 

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlAzureKeyVaultColumnMasterKeySettings -KeyURL $akvKey.ID

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Authenticate to Azure
Add-SqlAzureAuthenticationContext -Interactive

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName

CNG/Provider di archiviazione chiavi senza separazione dei ruoli (esempio)CNG/KSP without Role Separation (Example)

Lo script che segue è un esempio end-to-end di generazione di una chiave master della colonna in un archivio chiavi che implementa l'API Cryptography Next Generation (CNG) generando e crittografando una chiave di crittografia della colonna e creando i metadati della chiave in un database di SQL Server.The below script is an end-to-end example for generating a column master key in a key store that implements Cryptography Next Generation API (CNG), generating and encrypting a column encryption key, and creating key metadata in a SQL Server database.

L'esempio sfrutta l'archivio chiavi che usa il provider di archiviazione chiavi del software Microsoft.The example leverages the key store that uses Microsoft Software Key Storage Provider. È possibile scegliere di modificare l'esempio per usare un altro archivio, ad esempio il modulo di protezione hardware.You may choose to modify the example to use another store, such as your hardware security module. A tale scopo, è necessario assicurarsi che il provider di archiviazione chiavi (KSP) che implementa CNG per il dispositivo sia installato correttamente nel computer.For that, you will need to make sure the key store provider (KSP) that implements CNG for your device is installed and properly on your machine. È necessario sostituire "Microsoft Software Key Storage Provider" con il nome del provider di archiviazione chiavi del dispositivo.You will need to replace "Microsoft Software Key Storage Provider" with your device’s KSP name.

# Create a column master key in a key store that has a CNG provider, a.k.a key store provider (KSP).
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)

# Import the SqlServer module.
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$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]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCngColumnMasterKeySettings -CngProviderName $cngProviderName -KeyName $cngKeyName

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName

Provisioning delle chiavi con separazione dei ruoliKey Provisioning With Role Separation

In questa sezione sono elencati i passaggi per la configurazione della crittografia per i casi in cui gli amministratori della sicurezza non hanno accesso al database e gli amministratori di database non hanno accesso all'archivio chiavi o alle chiavi di testo non crittografato.This section provides the steps to configure encryption where security administrators do not have access to the database, and database administrators do not have access to the key store or plaintext keys.

Amministratore della sicurezzaSecurity Administrator

Prima di eseguire i passaggi che prevedono l'accesso alle chiavi di testo non crittografato o all'archivio chiavi (come indicato nella colonna Accede alle chiavi di testo non crittografato o all'archivio chiavi nella tabella che segue), assicurarsi che:Before running any steps that involves access to plaintext keys or the key store (identified in the Accesses plaintext keys/key store column in the below table), make sure that:

  1. l'ambiente di PowerShell venga eseguito in un computer protetto diverso da un computer che ospita il database.The PowerShell environment runs on a secure machine that is different from a computer hosting your database.
  2. gli amministratori di database dell'organizzazione non abbiano accesso al computer (cosa che vanificherebbe lo scopo della separazione dei ruoli).DBAs in your organization have no access to the machine (that would defeat the purpose of role separation).

Per altre informazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.For more information, see Security Considerations for Key Management.

AttivitàTask ArticoloArticle Accede alle chiavi in testo non crittografato o all'archivio delle chiaviAccesses plaintext keys/key store Accede al databaseAccesses database
Passaggio 1.Step 1. Creare una chiave master della colonna in un archivio chiavi.Create a column master key in a key store.

Nota: il modulo SqlServer non supporta questo passaggio.Note: The SqlServer module does not support this step. Per eseguire questa attività da una riga di comando, è necessario usare gli strumenti specifici del tipo di archivio chiavi.To accomplish this task from a command-line, you need to use the tools that are specific the type of your key store.
Creare e archiviare chiavi master della colonna (Always Encrypted)Create and Store Column Master Keys (Always Encrypted) Yes NoNo
Passaggio 2.Step 2. Avviare una sessione di PowerShell e importare il modulo SqlServer.Start a PowerShell session and import the SqlServer module. Importazione del modulo SqlServerImport the SqlServer module NoNo NoNo
Passaggio 3.Step 3. Creare un oggetto SqlColumnMasterKeySettings che includa informazioni sul percorso della chiave master della colonna.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings è un oggetto presente in memoria (PowerShell).SqlColumnMasterKeySettings is an object that exists in memory (in PowerShell). Usare il cmdlet specifico dell'archivio chiavi.Use the cmdlet that is specific to your key store. New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings

New-SqlCertificateStoreColumnMasterKeySettingsNew-SqlCertificateStoreColumnMasterKeySettings

New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings

New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
NoNo NoNo
Passaggio 4.Step 4. Eseguire l'autenticazione in Azure, se la chiave master della colonna è archiviata nell'insieme di credenziali delle chiavi di AzureAuthenticate to Azure, if your column master key is stored in Azure Key Vault Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Yes NoNo
Passaggio 5.Step 5. Generare una chiave di crittografia della colonna, crittografarla con la chiave master della colonna per generare un valore crittografato della chiave di crittografia della colonna.Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key. New-SqlColumnEncryptionKeyEncryptedValueNew-SqlColumnEncryptionKeyEncryptedValue Yes NoNo
Passaggio 6.Step 6. Fornire il percorso della chiave master della colonna (nome del provider e percorso della chiave master della colonna) e un valore crittografato della chiave di crittografia della colonna all'amministratore di database.Provide the location of the column master key (the provider name and a key path of the column master key) and an encrypted value of the column encryption key to the DBA. Vedere gli esempi seguenti.See the examples below. NoNo NoNo

AMMINISTRATORE DI DATABASEDBA

Gli amministratori di database usano le informazioni ricevute dall'amministratore della sicurezza (passaggio 6 precedente) per creare e gestire i metadati della chiave Always Encrypted nel database.DBAs use the information they receive from the Security Admin (step 6 above) to create and manage the Always Encrypted key metadata in the database.

AttivitàTask ArticoloArticle Accede alle chiavi di testo non crittografatoAccesses plaintext keys Accede al databaseAccesses database
Passaggio 1.Step 1. Ottenere il percorso della chiave master della colonna e un valore crittografato della chiave di crittografia della colonna dall'amministratore della sicurezza.Obtain the location of the column master key and encrypted value of the column encryption key from your Security Administrator. Vedere gli esempi seguenti.See the examples below. NoNo NoNo
Passaggio 2.Step 2. Avviare un ambiente PowerShell e importare il modulo SqlServer.Start a PowerShell environment and import the SqlServer module. Configurare Always Encrypted tramite PowerShellConfigure Always Encrypted using PowerShell NoNo NoNo
Passaggio 3.Step 3. Connettersi al server e a un database.Connect to your server and a database. Connessione a un databaseConnect to a Database NoNo Yes
Passaggio 4.Step 4. Creare un oggetto SqlColumnMasterKeySettings che includa informazioni sul percorso della chiave master della colonna.Create a SqlColumnMasterKeySettings object that contains information about the location of your column master key. SqlColumnMasterKeySettings è un oggetto presente in memoria.SqlColumnMasterKeySettings is an object that exists in memory. New-SqlColumnMasterKeySettingsNew-SqlColumnMasterKeySettings NoNo NoNo
Passaggio 5.Step 5. Creare i metadati relativi alla chiave master della colonna nel databaseCreate the metadata about the column master key in your database New-SqlColumnMasterKeyNew-SqlColumnMasterKey
Nota: il cmdlet genera l'istruzione CREATE COLUMN MASTER KEY (Transact-SQL) per creare i metadati della chiave master della colonna.Note: under the covers, the cmdlet issues the CREATE COLUMN MASTER KEY (Transact-SQL) statement to create column master key metadata.
NoNo Yes
Passaggio 6.Step 6. Creare i metadati della chiave di crittografia della colonna nel database.Create the column encryption key metadata in the database. New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey
Nota: gli amministratori di database usano una variazione del cmdlet che crea soltanto i metadati della chiave di crittografia della colonna.Note: DBAs use a variation of the cmdlet that only creates column encryption key metadata.
Il cmdlet genera l'istruzione CREATE COLUMN ENCRYPTION KEY (Transact-SQL) per creare i metadati della chiave di crittografia della colonna.Under the covers, the cmdlet issues the CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement to create column encryption key metadata.
NoNo Yes

Archivio certificati Windows con separazione dei ruoli (esempio)Windows Certificate Store with Role Separation (Example)

Amministratore della sicurezzaSecurity Administrator

# Create a column master key in Windows Certificate Store.
$storeLocation = "CurrentUser"
$certPath = "Cert:" + $storeLocation + "\My"
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation $certPath -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage DataEncipherment -KeySpec KeyExchange

# Import the SqlServer module
Import-Module "SqlServer"

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlCertificateStoreColumnMasterKeySettings -CertificateStoreLocation "CurrentUser" -Thumbprint $cert.Thumbprint

# Generate a column encryption key, encrypt it with the column master key to produce an encrypted value of the column encryption key.
$encryptedValue = New-SqlColumnEncryptionKeyEncryptedValue -TargetColumnMasterKeySettings $cmkSettings

# Share the location of the column master key and an encrypted value of the column encryption key with a DBA, via a CSV file on a share drive
$keyDataFile = "Z:\keydata.txt"
"KeyStoreProviderName, KeyPath, EncryptedValue" > $keyDataFile
$cmkSettings.KeyStoreProviderName + ", " + $cmkSettings.KeyPath + ", " + $encryptedValue >> $keyDataFile

# Read the key data back to verify
$keyData = Import-Csv $keyDataFile
$keyData.KeyStoreProviderName
$keyData.KeyPath
$keyData.EncryptedValue 

AMMINISTRATORE DI DATABASEDBA

# Obtain the location of the column master key and the encrypted value of the column encryption key from your Security Administrator, via a CSV file on a share drive.
$keyDataFile = "Z:\keydata.txt"
$keyData = Import-Csv $keyDataFile

# Import the SqlServer module
Import-Module "SqlServer"

# Connect to your database.
$serverName = "<server name>"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Integrated Security = True"
$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]

# Create a SqlColumnMasterKeySettings object for your column master key. 
$cmkSettings = New-SqlColumnMasterKeySettings -KeyStoreProviderName $keyData.KeyStoreProviderName -KeyPath $keyData.KeyPath

# Create column master key metadata in the database.
$cmkName = "CMK1"
New-SqlColumnMasterKey -Name $cmkName -InputObject $database -ColumnMasterKeySettings $cmkSettings

# Generate a  column encryption key, encrypt it with the column master key and create column encryption key metadata in the database. 
$cekName = "CEK1"
New-SqlColumnEncryptionKey -Name $cekName -InputObject $database -ColumnMasterKey $cmkName -EncryptedValue $keyData.EncryptedValue

Passaggi successiviNext Steps

Risorse aggiuntiveAdditional Resources