Partilhar via


Executar instruções Transact-SQL usando enclaves seguros

Aplica-se a: SQL Server 2019 (15.x) e posterior - somente Windows Banco de Dados SQL do Azure

Always Encrypted com enclaves seguros permite que algumas instruções Transact-SQL (T-SQL) realizem cálculos confidenciais em colunas de base de dados encriptadas num enclave seguro no lado do servidor.

Declarações usando enclaves seguros

Os seguintes tipos de instrução T-SQL utilizam enclaves seguros.

Instruções DDL usando enclaves seguros

Os seguintes tipos de instruções DDL (Data Definition Language) exigem enclaves seguros.

Instruções DML usando enclaves seguros

Os seguintes DML (Data Manipulation Language) instruções ou consultas em colunas habilitadas para enclave usando criptografia aleatória exigem enclaves seguros:

Observação

As operações realizadas em índices e consultas DML confidenciais usando enclaves só são suportadas em colunas ativadas com enclave que utilizam criptografia aleatória. Não há suporte para criptografia determinística.

O nível de compatibilidade do banco de dados deve ser definido como SQL Server 2022 (160) ou superior.

No Banco de Dados SQL do Azure e no SQL Server 2022 (16.x), consultas confidenciais usando enclaves em uma coluna de cadeia de caracteres (char, nchar) exigem que a coluna use um agrupamento de ponto de código binário (_BIN2) ou um agrupamento UTF-8. No SQL Server 2019 (15.x), a_BIN2 agrupamento é necessário.

Comandos DBCC usando enclaves seguros

DBCC (Transact-SQL) comandos administrativos que envolvem a verificação da integridade dos índices também podem exigir enclaves seguros se o banco de dados contiver índices em colunas habilitadas para enclave usando criptografia aleatória. Por exemplo, DBCC CHECKDB (Transact-SQL) e DBCC CHECKTABLE (Transact-SQL).

Pré-requisitos para executar instruções usando enclaves seguros

Seu ambiente precisa atender aos seguintes requisitos para dar suporte à execução de instruções que usam um enclave seguro.

  • Sua instância do SQL Server ou seu servidor de banco de dados no Banco de Dados SQL do Azure deve ser configurado corretamente para dar suporte a enclaves e atestado, se aplicável/necessário. Para obter mais informações, consulte o tópico Configuração do enclave seguro e o atestado.

  • Quando você estiver se conectando ao banco de dados a partir de um aplicativo ou ferramenta (como o SQL Server Management Studio), certifique-se de:

    • Use uma versão de driver de cliente ou uma versão de ferramenta que suporte Always Encrypted com enclaves seguros.

    • Habilite Always Encrypted para a conexão de banco de dados.

    • Especifique um protocolo de atestado, que determina se seu aplicativo ou ferramenta deve atestar o enclave antes de enviar consultas de enclave e qual serviço de atestado deve usar. A maioria das ferramentas e drivers suportam os seguintes protocolos de atestado:

      • Atestado do Microsoft Azure - impõe o atestado usando o Atestado do Microsoft Azure.
      • Serviço Guardião do Anfitrião - aplica a autenticação usando o Serviço Guardião do Anfitrião.
      • Nenhum - permite o uso de enclaves sem atestado.

      A tabela abaixo especifica protocolos de atestado válidos para determinados produtos SQL e tecnologias de enclave:

      Produto Tecnologia de enclave Protocolos de atestado suportados
      SQL Server 2019 (15.x) e posterior Enclaves VBS Serviço Guardião do Anfitrião, Nenhum
      Banco de Dados SQL do Azure Enclaves SGX nas bases de dados da série DC Atestado do Microsoft Azure
      Banco de Dados SQL do Azure Enclaves de VBS Nenhum
  • Especifique uma URL de atestado que seja válida para seu ambiente se você estiver usando atestado.

Pré-requisitos para executar instruções T-SQL usando enclaves no SSMS

Baixe a versão mais recente do SQL Server Management Studio (SSMS).

Certifique-se de executar suas instruções a partir de uma janela de consulta que usa uma conexão que tenha parâmetros Always Encrypted e attestation configurados corretamente.

  1. Na caixa de diálogo Conectar ao Servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.

  2. Selecione Opções >> e selecione a guia Propriedades da Conexão . Especifique o nome do banco de dados.

  3. Selecione o separador Sempre Encriptado.

  4. Selecione Ativar Always Encrypted (criptografia de coluna).

  5. Selecione Ativar enclaves seguros.

  6. Defina Protocolo para:

    1. Serviço Guardião do Host se você estiver usando o SQL Server.
    2. Microsoft Azure Attestation se estiver a usar o Azure SQL Database com enclaves Intel SGX.
    3. Nenhum se você estiver usando o Banco de Dados SQL do Azure com enclaves VBS.
  7. Especifique o URL do atestado do enclave. Não aplicável quando o Protocolo está definido como Nenhum. Por exemplo, https://hgs.bastion.local/Attestation ou https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Conectar-se ao servidor com atestação usando o SSMS

  8. Selecione Conectar.

  9. Se lhe for pedido para ativar a Parametrização para consultas Sempre Encriptadas, selecione Ativar.

Para obter mais informações, consulte Habilitando e desabilitando o Always Encrypted para uma conexão de banco de dados.

Pré-requisitos para executar instruções T-SQL usando enclaves no Azure Data Studio

Recomenda-se a versão mínima recomendada 1.23 ou superior. Certifique-se de executar suas instruções a partir de uma janela de consulta que usa uma conexão que tenha Always Encrypted habilitada e o protocolo de atestado correto e a URL de atestado configurada.

  1. Na caixa de diálogo Conexão , selecione Avançado... .

  2. Para ativar Sempre Encriptado para a conexão, defina o campo Sempre Encriptado como Ativado.

  3. Para habilitar enclaves seguros, defina o campo Enclaves seguros para Habilitado.

  4. Especifique o protocolo de atestado e a URL de atestado.

    • Se estiver a usar o SQL Server, defina Protocolo de Atestado para Serviço Host Guardian e insira a URL de atestado do Serviço Host Guardian no campo URL de Atestado de Enclave.
    • Se você estiver usando um banco de dados da série DC com Intel SGX no Banco de Dados SQL do Azure, defina do Protocolo de Atestado para de Atestado do Azure e insira a URL de atestado, fazendo referência à sua política no Microsoft Azure Attestation no campo Enclave Attestation URL.
    • Se estiveres a usar uma base de dados com enclaves VBS habilitados no Banco de Dados SQL do Azure, define Protocolo de Atestado como Nenhum.

    Conectar-se ao servidor com atestado usando o Azure Data Studio

  5. Selecione OK para fechar Propriedades Avançadas.

Para obter mais informações, consulte Habilitando e desabilitando o Always Encrypted para uma conexão de banco de dados.

Se pretender executar consultas DML parametrizadas, também precisará habilitar a Parametrização paraAlways Encrypted.

Exemplos

Esta seção inclui exemplos de consultas DML usando enclaves.

Os exemplos usam o esquema abaixo.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Jobs](
 [JobID] [int] IDENTITY(1,1) PRIMARY KEY,
 [JobTitle] [nvarchar](50) NOT NULL,
 [MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO

CREATE TABLE [HR].[Employees](
 [EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
 [SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [FirstName] [nvarchar](50) NOT NULL,
 [LastName] [nvarchar](50) NOT NULL,
 [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [JobID] [int] NULL,
 FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO

A consulta abaixo executa uma pesquisa por correspondência exata na coluna de cadeia de caracteres criptografada SSN.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

A consulta abaixo realiza uma pesquisa de padrões na coluna encriptada da cadeia de caracteres SSN, procurando por funcionários com os quatro últimos dígitos especificados de um Número de Identificação da Segurança Social.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

Comparação de intervalos

A consulta abaixo realiza uma comparação de intervalo na coluna Salary criptografada, procurando funcionários com salários dentro do intervalo especificado.

DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

Adere

A consulta abaixo executa uma junção entre Employees e Jobs tabelas usando a coluna Salary criptografada. A consulta recupera funcionários com salários fora de uma faixa salarial definida para o cargo do funcionário.

SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO

Classificação

A consulta abaixo classifica os registros de funcionários com base na coluna Salary criptografada, recuperando 10 funcionários com os salários mais altos.

Observação

A classificação de colunas criptografadas tem suporte no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure, mas não no SQL Server 2019 (15.x).

SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO

Próximos passos

Ver também