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 ALTER TABLE column_definition (Transact-SQL) que disparam operações de criptografia in-loco usando chaves habilitadas para enclave. Para obter mais informações, confira Configurar a criptografia de coluna in-loco usando o Always Encrypted com enclaves seguros.
- Instruções CREATE INDEX (Transact-SQL) e ALTER INDEX (Transact-SQL) que criam ou alteram índices em colunas habilitadas para enclave que usam a criptografia aleatória. Para obter mais informações, confira Criar e usar índices em colunas usando o Always Encrypted com 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:
- Consultas que usam um ou mais dos seguintes operadores Transact-SQL compatíveis em enclaves seguros:
- Operadores de comparação
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- As junções do SQL Server 2019 (15.x) só dão suporte a junções de loop aninhadas. O SQL Server 2022 (16.x) e o Banco de Dados SQL do Azure dão suporte a junções de loop, hash e mesclagem aninhadas
- SELECT – Cláusula ORDER BY (Transact-SQL). Com suporte no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure. Sem suporte no SQL Server 2019 (15.x)
- SELECT – Cláusula GROUP BY (Transact-SQL). Com suporte no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure. Sem suporte no SQL Server 2019 (15.x)
- Consultas que inserem, atualizam ou excluem linhas que, por sua vez, disparam a inserção e/ou a remoção de uma chave de índice em/de um índice em uma coluna habilitada para enclave. Para obter mais informações, confira Criar e usar índices em colunas usando o Always Encrypted com 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.
- Confira Desenvolver aplicativos usando Always Encrypted com enclaves seguros para informações sobre drivers cliente com suporte para Always Encrypted com enclaves seguros.
- Conferir as seções a seguir para obter informações sobre ferramentas que dão suporte ao 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.
- Se você estiver usando o SQL Server e o HGS (Serviço Guardião de Host), confira Determinar e compartilhar a URL de atestado do HGS.
- Se você estiver usando o banco de dados SQL do Azure com enclaves Intel SGX e o Atestado do Microsoft Azure, confira Determinar a URL de atestado para sua política de 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.
Na caixa de diálogo Conectar ao servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.
Selecione Opções >> e selecione a guia Propriedades da Conexão. Especifique o nome do banco de dados.
Selecione a guia Always Encrypted.
Selecione Habilitar Always Encrypted (criptografia de coluna).
Selecione Habilitar enclaves seguros.
Defina Protocolo como:
- Serviço Guardião de Host se estiver usando SQL Server.
- Atestado do Microsoft Azure se estiver usando Banco de Dados SQL do Azure com enclaves Intel SGX.
- Nenhum se você estiver usando o Banco de Dados SQL do Azure com enclaves SBV.
Especifique sua URL de atestado de enclave. Não aplicável quando o Protocolo é definido como Nenhum. Por exemplo,
https://hgs.bastion.local/Attestation
ouhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Selecione Conectar.
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.
Na caixa de diálogo Conexão, selecione Avançado….
Para habilitar o Always Encrypted para a conexão, defina o campo Always Encrypted como Habilitado.
Para habilitar enclaves seguros, defina o campo Enclaves seguros como Habilitado.
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.
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
Pesquisa de correspondência exata
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
Pesquisa de correspondência de padrões
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