Partilhar via


CRIAR CHAVE DE ENCRIPTAÇÃO DE BASE DE DADOS (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed InstanceAnalytics Platform System (PDW)

Cria uma chave de encriptação para encriptar de forma transparente uma base de dados. Para mais informações sobre transparent data encryption (TDE), veja Transparent Data Encryption (TDE).

Convenções sintáticas Transact-SQL

Sintaxe

-- Syntax for SQL Server  

CREATE DATABASE ENCRYPTION KEY  
       WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }  
   ENCRYPTION BY SERVER   
    {  
        CERTIFICATE Encryptor_Name |  
        ASYMMETRIC KEY Encryptor_Name  
    }  
[ ; ]  
-- Syntax for Parallel Data Warehouse  

CREATE DATABASE ENCRYPTION KEY  
       WITH ALGORITHM = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }  
   ENCRYPTION BY SERVER CERTIFICATE Encryptor_Name   
[ ; ]  

Argumentos

COM ALGORITMO = { AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY }
Especifica o algoritmo de encriptação para a chave de encriptação.

Advertência

A partir de SQL Server 2016, todos os algoritmos exceto AES_128, AES_192 e AES_256 ficam obsoletos. Para usar algoritmos mais antigos (não recomendado) deve definir a base de dados para o nível de compatibilidade da base de dados 120 ou inferior.

ENCRIPTAÇÃO POR CERTIFICADO DE SERVIDOR Encryptor_Name
Especifica o nome do encriptador usado para encriptar a chave de encriptação da base de dados.

ENCRIPTAÇÃO POR CHAVE ASSIMÉTRICA DO SERVIDOR Encryptor_Name Especifica o nome da chave assimétrica usada para encriptar a chave de encriptação da base de dados. Para encriptar a chave de encriptação da base de dados com uma chave assimétrica, a chave assimétrica deve residir num fornecedor extensível de gestão de chaves.

Observações

É necessária uma chave de encriptação de base de dados antes de uma base de dados poder ser encriptada usando encriptação de dados transparentes (TDE). Quando uma base de dados é encriptada de forma transparente, toda a base de dados é encriptada ao nível do ficheiro, sem quaisquer modificações especiais no código. O certificado ou chave assimétrica que encripta a chave de encriptação da base de dados deve estar localizado na master base de dados do sistema.

Certificados ou chaves assimétricas usadas para TDE estão limitados a um tamanho de chave privada de 3072 bits.

As instruções de encriptação de bases de dados são permitidas apenas em bases de dados de utilizadores.

A chave de encriptação da base de dados não pode ser exportada da base de dados. Está disponível apenas para o sistema, para utilizadores que têm permissões de depuração no servidor e para utilizadores que têm acesso aos certificados que encriptam e desencriptam a chave de encriptação da base de dados.

A chave de encriptação da base de dados não precisa de ser regenerada quando o proprietário da base de dados (dbo) é alterado.

Uma chave de encriptação de base de dados é criada automaticamente para uma base de dados SQL. Não precisa de criar uma chave usando a CREATE DATABASE ENCRYPTION KEY declaração.

Permissões

Requer permissão CONTROL na base de dados e permissão VIEW DEFINITION no certificado ou chave assimétrica usada para encriptar a chave de encriptação da base de dados.

Exemplos

Para exemplos adicionais usando TDE, veja Transparent Data Encryption (TDE), Enable TDE on SQL Server Using EKM, e Extensible Key Management Using Azure Key Vault (SQL Server).

A. Criar uma chave de encriptação de base de dados

O exemplo seguinte cria uma chave de encriptação de base de dados usando o AES_256 algoritmo, e protege a chave privada com um certificado chamado MyServerCert.

USE AdventureWorks2022;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

B. Restaurar uma base de dados encriptada por TDE para uma instância diferente

Para restaurar uma base de dados encriptada por TDE para uma instância diferente do SQL Server, deve primeiro importar o certificado que protege a chave de encriptação da base de dados. Faz uma cópia de segurança do certificado e da sua chave privada a partir do servidor de origem, depois cria o certificado na instância de destino antes de restaurares a base de dados.

No servidor de origem, faça uma cópia de segurança do certificado:

-- On the SOURCE server
USE master;
GO
BACKUP CERTIFICATE MyServerCert
TO FILE = 'C:\Backup\MyServerCert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Backup\MyServerCert.pvk',
    ENCRYPTION BY PASSWORD = '<strong_password>'
);
GO

No servidor de destino, crie o certificado a partir dos ficheiros de backup e depois restaure a base de dados:

-- On the TARGET server
USE master;
GO
CREATE CERTIFICATE MyServerCert
FROM FILE = 'C:\Backup\MyServerCert.cer'
WITH PRIVATE KEY (
    FILE = 'C:\Backup\MyServerCert.pvk',
    DECRYPTION BY PASSWORD = '<strong_password>'
);
GO

-- Now you can restore the TDE-encrypted database
RESTORE DATABASE AdventureWorks2022
FROM DISK = 'C:\Backup\AdventureWorks2022.bak'
WITH MOVE 'AdventureWorks2022_Data' TO 'D:\Data\AdventureWorks2022.mdf',
     MOVE 'AdventureWorks2022_Log' TO 'D:\Data\AdventureWorks2022.ldf';
GO

Importante

O certificado deve ter o mesmo nome e ser criado a partir dos mesmos ficheiros de backup. Se o certificado não corresponder, a restauração falha com um erro de chave de encriptação.