Partilhar via


Configurar o Always Encrypted usando o PowerShell

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

O módulo SqlServer PowerShell fornece cmdlets para configurar 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 o objetivo principal do Always Encrypted é garantir que os dados confidenciais criptografados estejam seguros, mesmo que o sistema de banco de dados seja comprometido, a execução de 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 mais recomendações relacionadas à segurança, consulte Considerações de segurança para gerenciamento de chaves.

Você pode usar o PowerShell para gerenciar chaves Always Encrypted com e sem separação de funções, fornecendo controle sobre quem tem acesso às chaves de criptografia reais no armazenamento de chaves e quem tem acesso ao banco de dados.

Para obter mais recomendações, consulte Considerações de segurança para gerenciamento de chaves.

Pré-requisitos

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

Importando 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 apropriada.
  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

Conectando-se a um banco de dados

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

  1. Conecte-se usando o Get-SqlDatabase cmdlet.
  2. Conecte-se usando o SQL Server PowerShell Provider.

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 passar 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

Alternativamente, você pode usar tubulações:

$database | Get-SqlColumnMasterKey

Usando o provedor do SQL Server PowerShell

O SQL Server PowerShell Provider 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 pelos caminhos usando aliases do Windows PowerShell semelhantes aos comandos que você normalmente usa para navegar pelos caminhos do sistema de arquivos. Depois de navegar até a instância de destino e o banco de dados, os cmdlets subsequentes visam esse banco de dados, conforme mostrado no exemplo a seguir.

Observação

Esse método de conexão a um 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 genérico Path, 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 sempre criptografadas usando o PowerShell

Referência de cmdlet sempre criptografado

Os seguintes cmdlets do PowerShell estão disponíveis para 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 de coluna existente no banco de dados.
Complete-SqlColumnMasterKeyRotation Completa a rotação de uma chave-mestra de coluna
Get-SqlColumnEncryptionKey Retorna todos os objetos de chave de criptografia de coluna definidos no banco de dados ou retorna um objeto de chave de criptografia de coluna com o nome especificado.
Get-SqlColumnMasterKey Retorna os objetos de chave mestra de coluna definidos no banco de dados ou retorna um objeto de chave mestra de coluna com o nome especificado.
Comando Invoke-SqlColumnMasterKeyRotation para rotação da chave mestre da coluna SQL 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 armazenamento de chaves que suporta a API 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 de coluna.
New-SqlColumnEncryptionSettings Cria um objeto SqlColumnEncryptionSettings que encapsula informações sobre a criptografia de uma única coluna, incluindo CEK e tipo de criptografia.
New-SqlColumnMasterKey Cria um objeto de chave mestra de coluna na base de dados.
New-SqlColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings para uma chave mestra de coluna com o provedor especificado e o caminho da chave.
New-SqlCspColumnMasterKeySettings Cria um objeto SqlColumnMasterKeySettings descrevendo uma chave assimétrica armazenada em um armazenamento de chaves com um provedor de serviços de criptografia (CSP) que suporta a API de criptografia (CAPI).
Remove-SqlColumnEncryptionKey Remove o objeto de chave de criptografia de coluna do banco de dados.
Remove-SqlColumnEncryptionKeyValue Remove um valor criptografado de um objeto de chave de criptografia de coluna existente no banco de dados.
Remove-SqlColumnMasterKey Remove o objeto de chave mestra de coluna do banco de dados.
Set-SqlColumnEncryption Criptografa, descriptografa ou criptografa novamente colunas especificadas no banco de dados.