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:
- Use o cmdlet Set-ExecutionPolicy para definir a política de execução de script adequada.
- 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:
- Conectar-se usando o cmdlet Get-SqlDatabase.
- 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
- Provisionar chaves do Always Encrypted usando o PowerShell
- Girar chaves Always Encrypted usando o PowerShell
- Criptografar, criptografar novamente ou descriptografar colunas com 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. |