Executar instruções Transact-SQL usando os enclaves seguros

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores (somente para Windows) Banco de Dados SQL do Azure

O Always Encrypted com enclaves seguros permite que algumas instruções T-SQL (Transact-SQL) executem computações confidenciais em colunas de banco de dados criptografadas em um enclave seguro no lado do servidor.

Instruções com enclaves seguros

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

Instruções DDL com enclaves seguros

Os tipos de instruções DDL (linguagem de definição de dados) a seguir exigem enclaves seguros.

Instruções DML com enclaves seguros

As seguintes instruções ou consultas DML (linguagem de manipulação de dados) em colunas habilitadas para enclave que usam a criptografia aleatória exigem enclaves seguros:

Observação

Só há suporte para operações em índices e consultas DML confidenciais com enclaves em colunas habilitadas para enclave que usam a criptografia aleatória. Não há suporte para a criptografia determinística.

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

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

Comandos DBCC com enclaves seguros

Os comandos administrativos DBCC (Transact-SQL) que envolvem a verificação da integridade dos índices também poderão exigir enclaves seguros se o banco de dados contiver índices em colunas habilitadas para enclave que usam a 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 requisitos a seguir para dar suporte a instruções em execução que usam um enclave seguro.

  • A instância do SQL Server ou o servidor de banco de dados do banco de dados SQL do Azure precisam ser configurados corretamente para dar suporte aos enclaves e ao atestado, se for o caso ou se for necessário. Para obter mais informações, confira Configurar o atestado e enclave seguro.

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

    • Usar uma versão de driver cliente ou uma versão de ferramenta que dá suporte a Always Encrypted com enclaves seguros.

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

    • Especificar um protocolo de atestado que determina se o aplicativo ou a ferramenta deve atenstar o enclave antes de enviar consultas de enclave e, nesse caso, qual serviço de atestado deverá usar. A maioria das ferramentas e dos drivers dá suporte aos seguintes protocolos de atestado:

      • Atestado do Microsoft Azure: impõe o atestado usando o Atestado do Microsoft Azure.
      • Serviço Guardião de Host: impõe o atestado usando o Serviço Guardião de Host.
      • Nenhum: permite o uso de enclaves sem atestado.

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

      Product Tecnologia de enclave Protocolos de atestado com suporte
      SQL Server 2019 (15.x) e posterior Enclaves SBV Serviço Guardião de Host, nenhum
      Banco de Dados SQL do Azure Enclaves SGX (em bases de dados da série DC) Atestado do Microsoft Azure
      Banco de Dados SQL do Azure Enclaves SBV Nenhum
  • Especifique um URL de atestado válido para o 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 SSMS (SQL Server Management Studio).

Execute as instruções em uma janela de consulta que usa uma conexão que tenha o Always Encrypted e os parâmetros de atestado 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 a guia Always Encrypted.

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

  5. Selecione Habilitar enclaves seguros.

  6. Defina Protocolo como:

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

    Conectar-se ao servidor com o atestado usando o SSMS

  8. Selecione Conectar.

  9. Se precisar habilitar a parametrização para consultas do Always Encrypted, selecione Habilitar.

Para obter mais informações, confira Habilitar e desabilitar 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

A versão mínima 1.23 ou superior é recomendada. Execute as instruções em uma janela de consulta que usa uma conexão que tenha o Always Encrypted habilitado e a URL e o protocolo de atestado corretos configurados.

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

  2. Para habilitar o Always Encrypted para a conexão, defina o campo Always Encrypted como Habilitado.

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

  4. Especifique o protocolo e a URL de atestado.

    • Se você estiver usando o SQL Server, defina Protocolo de Atestado como Serviço Guardião de Host e insira a URL de atestado do Serviço Guardião de Host no campo URL de Atestado de Enclave.
    • Se estiver usando um banco de dados da série DC com Intel SGX no Banco de Dados SQL do Azure, defina Protocolo de Atestado como Atestado do Azure e insira a URL de atestado que referencia a política no Atestado do Microsoft Azure no campo URL de Atestado de Enclave.
    • Se você estiver usando um banco de dados com enclaves VBS habilitados no Banco de Dados SQL do Azure, defina Protocolo de Atestado como Nenhum.

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

  5. Selecione OK para fechar as Propriedades avançadas.

Para obter mais informações, confira Habilitar e desabilitar o Always Encrypted para uma conexão de banco de dados.

Se você planeja executar consultas DML parametrizadas, habilite também a Parametrização do Always Encrypted.

Exemplos

Esta seção inclui exemplos de consultas DML que usam 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 de correspondência exata na coluna de cadeia de caracteres SSN criptografada.

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

A consulta abaixo executa uma pesquisa de correspondência de padrões na coluna de cadeia de caracteres SSN criptografada, pesquisando os funcionários com os últimos quatro dígitos especificados de um número do seguro social.

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

Comparação de intervalos

A consulta abaixo executa uma comparação de intervalos na coluna Salary criptografada, pesquisando os 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

Junções

A consulta abaixo executa uma junção entre as tabelas Employees e Jobs usando a coluna Salary criptografada. A consulta recupera os funcionários com salários fora de um intervalo de salário para o trabalho 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 os 10 funcionários com os salários mais altos.

Observação

Há suporte para a classificação de colunas criptografadas 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óximas etapas

Confira também