Configurar Always Encrypted usando o PowerShell

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

O módulo do SqlServer PowerShell fornece cmdlets para configurar o Always Encrypted no Banco de Dados SQL do Azure ou no SQL Server.

Considerações de segurança ao usar o PowerShell para configurar o Always Encrypted

Como a meta principal do Always Encrypted é garantir que os dados confidenciais criptografados estejam seguros mesmo se o sistema do banco de dados for comprometido, executar um script do PowerShell que processa chaves ou dados confidenciais no computador do SQL Server pode reduzir ou anular os benefícios do recurso. Para obter recomendações adicionais relacionadas à segurança, consulte Security Considerations for Key Management(Considerações de segurança para o Gerenciamento de Chaves).

Você pode usar o PowerShell para gerenciar chaves Always Encrypted com e sem separação de funções, oferecendo controle sobre quem tem acesso à criptografia de chaves real no repositório de chaves e quem tem acesso ao banco de dados.

Para obter recomendações adicionais, consulte Security Considerations for Key Management(Considerações de segurança para o Gerenciamento de Chaves).

Pré-requisitos

Instalar o módulo do PowerShell do SqlServer, versão 22.0.50 ou posterior em um computador seguro que NÃO seja um computador que hospeda a instância do SQL Server. O módulo pode ser instalado diretamente da Galeria do PowerShell. Consulte as instruções de download para ver mais detalhes.

Como importar o módulo SqlServer

Para carregar o módulo SqlServer:

  1. Use o cmdlet Set-ExecutionPolicy para definir a política de execução de script adequada.
  2. Use o cmdlet Import-Module para importar o módulo SqlServer.

Este exemplo carrega o módulo SqlServer.

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

Ao fazer a conexão com um banco de dados

Alguns dos cmdlets do Always Encrypted trabalham com dados ou metadados no banco de dados e requerem que você se conecte ao banco de dados primeiro. Há dois métodos recomendados para se conectar a um banco de dados ao configurar o Always Encrypted usando o módulo SqlServer:

  1. Conectar-se usando o cmdlet Get-SqlDatabase.
  2. Conectar-se usando o Provedor do SQL Server PowerShell.

Usando Get-SqlDatabase

O cmdlet Get-SqlDatabase permite que você se conecte a um banco de dados no SQL Server ou no Banco de Dados SQL do Azure. Ele retorna um objeto de banco de dados, que você pode transmitir usando o parâmetro InputObject de um cmdlet que se conecta ao banco de dados.

Usando o 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

Como alternativa, você pode usar a barra vertical:

$database | Get-SqlColumnMasterKey

Usando o Provedor do SQL Server PowerShell

O Provedor do SQL Server PowerShell expõe a hierarquia de objetos do SQL Server em caminhos semelhantes aos caminhos do sistema de arquivos. Com o SQL Server PowerShell, você pode navegar nos caminhos usando aliases do Windows PowerShell semelhantes aos comandos normalmente usados para navegar em caminhos do sistema de arquivos. Depois de navegar para a instância de destino e para o banco de dados, os cmdlets seguintes terão como destino esse banco de dados, como mostrado no exemplo a seguir.

Observação

Esse método de conexão com o banco de dados funciona apenas para o SQL Server (não há suporte no Banco de Dados SQL do 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

Como alternativa, você pode especificar um caminho de banco de dados usando o parâmetro Path genérico, em vez de navegar até o banco de dados.

# 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

Tarefas do Always Encrypted usando o PowerShell

Referência de cmdlet do Always Encrypted

Os cmdlets do PowerShell a seguir estão disponíveis para o Always Encrypted:

CMDLET Descrição
Add-SqlAzureAuthenticationContext Executa a autenticação no Azure e adquire um token de autenticação.
Add-SqlColumnEncryptionKeyValue Adiciona um novo valor criptografado para um objeto de chave de criptografia da coluna existente no banco de dados.
Complete-SqlColumnMasterKeyRotation Conclui a rotação de uma chave mestra de coluna
Get-SqlColumnEncryptionKey Retorna todos os objetos de chave de criptografia de coluna no banco de dados ou retorna um objeto de chave de criptografia da coluna com o nome especificado.
Get-SqlColumnMasterKey Retorna os objetos de chave mestra da coluna definidos no banco de dados ou retorna um objeto de chave mestra da coluna com o nome especificado.
Invoke-SqlColumnMasterKeyRotation Inicia a rotação de uma chave mestra de coluna.
New-SqlAzureKeyVaultColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings descrevendo uma chave assimétrica armazenada no Cofre de Chaves do Azure.
New-SqlCngColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings descrevendo uma chave assimétrica armazenada em um repositório de chaves com suporte à API de CNG (Cryptography Next Generation).
New-SqlColumnEncryptionKey Cria um objeto de chave de criptografia de coluna no banco de dados.
New-SqlColumnEncryptionKeyEncryptedValue Produz um valor criptografado de uma chave de criptografia da coluna.
New-SqlColumnEncryptionSettings Cria um objeto SqlColumnEncryptionSettings que encapsula informações sobre a criptografia de uma única coluna, incluindo o tipo de criptografia e CEK.
New-SqlColumnMasterKey Cria um objeto de chave mestra de coluna no banco de dados.
New-SqlColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings para uma chave mestra de coluna com o provedor especificado e o caminho principal.
New-SqlCspColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings descrevendo uma chave assimétrica armazenada em um repositório de chaves com um CSP (Provedor de Serviços de Criptografia) dando suporte à CAPI (Cryptography API).
Remove-SqlColumnEncryptionKey Remove o objeto de chave de criptografia da coluna do banco de dados.
Remove-SqlColumnEncryptionKeyValue Remove um valor criptografado de um objeto de chave de criptografia da coluna no banco de dados.
Remove-SqlColumnMasterKey Remove o objeto de chave mestra da coluna do banco de dados.
Set-SqlColumnEncryption Criptografa, descriptografa ou criptografa novamente as colunas especificadas no banco de dados.

Confira também