-
Novidade no SQL Server 2022: A Função DATETRUNC
O SQL Server 2022 trouxe uma série de novidades muito aguardadas pelos desenvolvedores e DBAs, e uma delas é a nova função
DATETRUNC. Essa função simplifica bastante o trabalho com datas, especialmente quando precisamos truncar valores de data/hora para uma parte específica como ano, mês, dia, etc.Se você já precisou agrupar dados por mês ou comparar apenas partes de uma data, provavelmente usou funções como
DATEADDeDATEDIFFde forma combinada. A boa notícia é que, agora, comDATETRUNC, esse processo ficou muito mais limpo e direto.
O que é a função D
ATETRUNC?A função
DATETRUNCretorna um valor de data/hora truncado para o limite inferior da parte da data especificada (por exemplo: truncar uma data para o início do mês, início do dia, etc).Essa função está disponível a partir do SQL Server 2022, e também é compatível com o Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure.
Sintaxe
DATETRUNC(date_part, date_expression)date_part: A parte da data para a qual o valor será truncado.date_expression: A expressão de data que será truncada.
Argumentos Válidos
Você pode truncar para várias partes da data. Aqui estão algumas opções:
date_partDescrição year, yyyy, yy Início do ano quarter, qq, q Início do trimestre month, mm, m Início do mês day, dd, d Início do dia week, wk, ww Início da semana hour, hh Início da hora minute, mi, n Início do minuto second, ss, s Início do segundo millisecond, ms Início do milissegundo
Exemplos
🔹 Truncar para o início do mês
SELECT DATETRUNC(MONTH, '2025-04-14 13:45:30') AS Truncado;Resultado:
2025-04-01 00:00:00.000
🔹 Truncar para o início do ano
SELECT DATETRUNC(YEAR, '2025-04-14 13:45:30') AS Truncado;Resultado:
2025-01-01 00:00:00.000
🔹 Truncar uma coluna de data
SELECT DATETRUNC(DAY, OrderDate) AS DiaPedido, COUNT(*) AS TotalPedidos
FROM Sales.Orders
GROUP BY DATETRUNC(DAY, OrderDate);Esse exemplo é perfeito para agrupar pedidos por dia de forma limpa e direta — sem a necessidade de converter tipos ou manipular strings.
Comparação com Métodos Antigos
Antes do SQL Server 2022, você teria que usar combinações de
DATEADDeDATEDIFFpara fazer algo parecido:Truncar para o início do mês (antes do SQL 2022) SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, '2025-04-14 13:45:30'), 0);ComDATETRUNC, essa complexidade desaparece.
Conclusão
A função
DATETRUNCé uma adição poderosa ao arsenal de qualquer profissional que trabalha com SQL Server. Ela torna o código mais legível, limpo e eficiente, especialmente em operações de agrupamento, análise temporal e relatórios.Se você ainda não testou essa novidade, vale a pena experimentar em seus scripts e procedures. Afinal, menos código e mais clareza são sempre bem-vindos!
-
Funções Lógicas GREATEST e LEAST no SQL Server 2022: Comparações Mais Simples e Poderosas
Com o SQL Server 2022 (versão 16.x), os desenvolvedores e DBAs ganharam dois novos aliados para escrever consultas mais limpas e eficientes: as funções
GREATESTeLEAST. Essas funções, comuns em outros SGBDs como Oracle e PostgreSQL, agora estão disponíveis nativamente no SQL Server — e facilitam bastante comparações de múltiplos valores.Neste post, você vai entender como essas funções funcionam, ver exemplos práticos e conferir dicas úteis para utilizá-las no seu dia a dia.
O que são as funções
GREATESTeLEAST?GREATESTretorna o maior valor entre dois ou mais argumentos.LEASTretorna o menor valor entre dois ou mais argumentos.
Ambas funções comparam os argumentos fornecidos e retornam um único valor escalar com base na lógica de comparação padrão do SQL Server.
Requisitos
Essas funções estão disponíveis a partir do SQL Server 2022 (16.x) e exigem nível de compatibilidade 160 ou superior.
Sintaxe
GREATEST ( expression [ ,...n ] )
LEAST ( expression [ ,...n ] )- expression: Pode ser uma constante, uma coluna, uma variável ou qualquer expressão válida. Deve haver pelo menos dois argumentos.
- Todos os argumentos devem ser do mesmo tipo de dados ou implicitamente conversíveis.
Exemplos
Retornar o maior valor entre três colunas
SELECT Nome, GREATEST(Nota1, Nota2, Nota3) AS MaiorNota FROM Alunos;Retornar o menor valor entre três datas
SELECT IDPedido, LEAST(DataPedido, DataPagamento, DataEntrega) AS DataMaisAntiga
FROM Pedidos;
Casos de Uso Comuns
- Comparar múltiplos preços de diferentes fornecedores e selecionar o menor (com
LEAST). - Calcular a maior nota de avaliação entre várias provas (com
GREATEST). - Verificar qual data veio primeiro em um fluxo de processos.
- Construir regras de negócio como limites máximos ou mínimos em decisões condicionais (
CASE,IF, etc).
Como era antes do SQL Server 2022?
Antes, você precisava usar funções
CASEpara simular esse comportamento:-- Simulando GREATEST
SELECT
CASE
WHEN Nota1 >= Nota2 AND Nota1 >= Nota3 THEN Nota1
WHEN Nota2 >= Nota3 THEN Nota2
ELSE Nota3
END AS MaiorNota
FROM Alunos;Esse código era mais difícil de manter. mas com
GREATESTeLEAST, esse tipo de lógica se torna muito mais legível e direta.
Testando no SSMS
Você pode experimentar a função rapidamente com algo assim:
SELECT
GREATEST(100, 200, 50) AS Maior,
LEAST(100, 200, 50) AS Menor;Resultado:
Maior Menor 200 50
Conclusão
As funções
GREATESTeLEASTvieram para facilitar a vida no SQL Server 2022. Com elas, você escreve menos código, com mais clareza e maior eficiência. Se você ainda está usandoCASEpara esse tipo de comparação, é hora de dar uma chance a essas novidades.Já começou a usar essas funções no seu dia a dia? Compartilhe suas experiências ou dúvidas nos comentários!
-
SQL Server 2022: Gerando Séries de Números no SQL Server 2022 com a Função GENERATE_SERIES
No SQL Server 2022 (16.x) e versões posteriores, a função
GENERATE_SERIESé uma ferramenta poderosa para criar uma sequência de números dentro de um intervalo especificado. Seja para fins de testes, análises de dados ou outros cenários, essa função permite gerar números de forma eficiente e flexível. Neste post, vamos explorar como usar essa função e entender seus detalhes.O que é a Função
GENERATE_SERIES?A função
GENERATE_SERIESfoi introduzida no SQL Server 2022 (16.x) e também está disponível no Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure. Ela gera uma sequência de números dentro de um intervalo definido pelo usuário, com a possibilidade de especificar o valor de incremento ou decremento entre os números.Aplicações da Função
A função
GENERATE_SERIESpode ser muito útil em diversas situações, incluindo:- Criação de intervalos sequenciais: Para gerar números em sequência, como datas ou identificadores.
- Testes e validações: Para realizar testes em dados gerados automaticamente, sem a necessidade de inserir manualmente os números.
- Análise de Dados: Ao gerar séries numéricas, você pode usar essas sequências como base para operações analíticas.
Requisitos de Compatibilidade
Para usar a função
GENERATE_SERIES, é necessário que o banco de dados esteja com o nível de compatibilidade configurado como 160 ou superior. Caso contrário, o SQL Server não reconhecerá a função. Para verificar ou alterar o nível de compatibilidade do banco de dados, use o comando:ALTER DATABASE NomeDoBanco SET COMPATIBILITY_LEVEL = 160;Isso garante que você poderá aproveitar os recursos do SQL Server 2022 e versões mais recentes.Sintaxe da Função
GENERATE_SERIESA sintaxe da função
GENERATE_SERIESé simples e fácil de usar:GENERATE_SERIES (start, stop [, step])Argumentos:
- start: O valor inicial do intervalo (pode ser
tinyint,smallint,int,bigint,decimal, ounumeric). - stop: O valor final do intervalo, que deve ser do mesmo tipo de dados que o
start. - step (opcional): O valor que indica o incremento ou decremento entre os números na sequência. O valor padrão é 1, mas você pode personalizar conforme a necessidade. O valor de
stepnão pode ser zero.
Tipos de Retorno
A função retorna uma tabela com uma coluna única chamada
value, que contém a sequência gerada. O tipo de dados da coluna será o mesmo destartestop.
Exemplo
Gerando uma sequência de números inteiros de 1 a 10 (incremento padrão de 1)
Este exemplo gera uma série de números inteiros de 1 a 10, com o incremento padrão de 1:
SELECT value FROM GENERATE_SERIES(1, 10);Resultado:value 1 2 3 4 5 6 7 8 9 10
Considerações Finais
A função
GENERATE_SERIESno SQL Server 2022 (16.x) é uma ferramenta valiosa para gerar séries de números sequenciais. Seja para fins analíticos, de teste ou de cálculos, ela oferece flexibilidade e eficiência, sem a necessidade de manipulações complexas. -
SQL Server 2022: Facilitando a Gestão de Estatísticas com a Opção AUTO_DROP
Gerenciar estatísticas no SQL Server sempre foi uma parte essencial do desempenho e da manutenção do banco de dados. No entanto, alterações de esquema em tabelas com estatísticas criadas manualmente costumavam ser um problema — essas estatísticas podiam bloquear mudanças, exigindo ações manuais para removê-las. Felizmente, a partir do SQL Server 2022 (16.x), esse cenário mudou com a introdução da opção AUTO_DROP.
O Que é AUTO_DROP?
A opção
AUTO_DROPé um novo recurso disponível no SQL Server 2022, no Banco de Dados SQL do Azure e na Instância Gerenciada do SQL do Azure. Com ela, você pode criar estatísticas manuais que se comportam como as estatísticas geradas automaticamente — ou seja, elas não bloqueiam alterações de esquema e são descartadas automaticamente quando não forem mais necessárias.Esse comportamento é habilitado por padrão para todos os bancos de dados novos ou migrados no SQL Server 2022.
Antes do SQL Server 2022
Se você já precisou excluir uma coluna ou modificar a estrutura de uma tabela, mas foi impedido por estatísticas manuais associadas, sabe o quão frustrante isso pode ser. No SQL Server 2019 e versões anteriores, essas estatísticas precisavam ser removidas manualmente antes de executar as alterações de esquema.
Com AUTO_DROP
Agora, ao criar estatísticas com
AUTO_DROP = ON, você permite que o SQL Server as remova automaticamente caso elas entrem em conflito com alguma mudança de estrutura. Isso simplifica e agiliza tarefas administrativas e evita que estatísticas antigas fiquem “penduradas” e causem dores de cabeça.Criando Estatísticas com AUTO_DROP
Veja um exemplo de como criar estatísticas com a opção ativada:
CREATE STATISTICS [minhaEstatistica] ON [dbo].[minhaTabela]([ID], [Data], [Usuario]) WITH AUTO_DROP = ON;Esse comando cria uma estatística chamadaminhaEstatisticana tabelaminhaTabela, comAUTO_DROPhabilitado.Atualizando Estatísticas Existentes
Se você já tem estatísticas criadas manualmente e quer atualizar a configuração para que também usem a remoção automática, é possível fazer isso facilmente:
UPDATE STATISTICS [dbo].[minhaTabela] [minhaEstatistica]
WITH AUTO_DROP = ON;Verificando a Configuração de AUTO_DROP
Para checar se as estatísticas existentes estão com
AUTO_DROPhabilitado, você pode consultar a DMVsys.stats:SELECT object_id, [name], auto_drop FROM sys.stats;A coluna
auto_dropindica se a opção está ativa (1) ou não (0).Cuidados e Considerações
- A opção
AUTO_DROPnão pode ser aplicada em estatísticas criadas automaticamente, pois elas já usam esse comportamento por padrão. - Em alguns casos, especialmente ao restaurar backups de versões anteriores para o SQL Server 2022, os metadados da estatística podem vir incorretos. Para corrigir isso, recomenda-se executar o seguinte comando após a restauração:
EXEC sp_updatestats;Esse comando atualiza as estatísticas e também ajusta os metadados conforme necessário, garantindo que o comportamento deAUTO_DROPseja aplicado corretamente.Conclusão
A opção
AUTO_DROPrepresenta mais um passo em direção à automação e simplificação da administração de bancos de dados no SQL Server. Ela elimina um dos incômodos relacionados à manutenção de estatísticas e ajuda a garantir que as alterações de esquema ocorram sem atritos desnecessários.Se você está migrando para o SQL Server 2022 ou já está usando essa versão, aproveite esse recurso para manter seu ambiente mais limpo, organizado e eficiente.
- A opção
-
Explorando a cláusula WINDOW no SQL Server. Simplificando funções de janela
Com o SQL Server 2022, novas funcionalidades foram introduzidas para facilitar o uso e a leitura de consultas, especialmente quando se trabalha com funções de janela. Uma dessas adições é a cláusula
WINDOW, que permite definir especificações reutilizáveis de janela para funções comoROW_NUMBER(),SUM(),AVG(), entre outras.Neste post, vamos entender como essa cláusula funciona, seus benefícios, requisitos e como utilizá-la na prática.
O que é a cláusula WINDOW?
A cláusula
WINDOWpermite nomear uma definição de janela que pode ser reutilizada em várias funções de janela dentro de uma consulta. Isso torna o código mais limpo, legível e menos propenso a erros de repetição.Ela é usada em conjunto com a cláusula
OVER, que define como as linhas devem ser particionadas e ordenadas para a função de janela.Requisitos
Para utilizar a cláusula
WINDOW, o banco de dados deve estar com nível de compatibilidade 160 ou superior. Você pode verificar e alterar isso com os comandos:ALTER DATABASE NomeDoBanco SET COMPATIBILITY_LEVEL = 160;Sintaxe da cláusula WINDOW
WINDOW nome_da_janela AS (
[ janela_referenciada ]
[ PARTITION BY ... ]
[ ORDER BY ... ]
[ ROWS | RANGE ... ]
)window_name: Nome da janela que será usada na cláusulaOVER.PARTITION BY: Divide os dados em grupos.ORDER BY: Ordena os dados dentro de cada partição.ROWSouRANGE: Define um frame (janela móvel) dentro da partição.
Vantagens da cláusula WINDOW
- Reduz duplicação de código SQL.
- Melhora a legibilidade de consultas com múltiplas funções de janela.
- Permite construir janelas complexas com base em outras janelas nomeadas.
Conclusão
A cláusula
WINDOWé uma adição poderosa ao arsenal de quem trabalha com SQL Server, promovendo clareza, organização e eficiência em consultas que envolvem funções analíticas. Se você ainda não testou, experimente utilizá-la em seus relatórios e scripts analíticos!Você já utilizou a cláusula
WINDOWnas suas queries? Compartilhe sua experiência nos comentários! 👇 -
Juiz da Imagine Cup
Olá pessoal, esse ano fui escolhido como um dos juízes da Imagine Cup.
A Imagine Cup é uma competição anual patrocinada e organizada pela Microsoft que reúne estudantes de desenvolvimento do mundo todo para ajudar a resolver alguns dos desafios mais difíceis do mundo. É considerada uma “Olimpíada da Tecnologia” pela ciência da computação e engenharia, sendo considerada uma das principais competições e premiações relacionadas à tecnologia e ao design de software. Todos os competidores da Imagine Cup criam projetos que abordam o tema da Imagine Cup: “Imagine um mundo onde a tecnologia ajuda a resolver os problemas mais difíceis”. Iniciada em 2003, a competição tem crescido constantemente, com mais de 2 milhões de competidores representando 150 países em 2022.

Tive também a grata surpresa de receber um Certificate of Appreciation por ter participado como voluntário de mais essa iniciativa Microsoft.

-
What’s new on SQL Server 2022 – WAIT_AT_LOW_PRIORITY
Quando falamos de manutenção de índices em tabelas grandes, especialmente em ambientes de produção com alta concorrência, um dos maiores desafios é evitar o impacto em transações ativas. Pensando nisso, o SQL Server 2022 oferece uma opção extremamente útil:
WAIT_AT_LOW_PRIORITY, que torna a criação ou alteração de índices online mais inteligente e menos intrusiva.Neste post, vamos entender o que é essa opção, como ela funciona e quando aplicá-la para garantir alta disponibilidade e desempenho.
O problema: bloqueios durante operações de índice online
Mesmo ao usar
ONLINE = ONem operações de criação ou reconstrução de índice, o SQL Server precisa, em determinado momento, adquirir bloqueios compartilhados (S) ou até bloqueios de modificação de esquema (Sch-M). Esses bloqueios, embora geralmente sejam mantidos por um curto período, podem causar gargalos consideráveis em ambientes de alta concorrência, como:- Atrasos em transações de leitura e escrita
- Aumento da latência em consultas
- Possíveis timeouts
- Queda na taxa de throughput
Isso é especialmente crítico em bancos com alta carga de trabalho ou transações de longa duração.
A solução:
WAIT_AT_LOW_PRIORITYPara contornar esses efeitos colaterais, o SQL Server introduziu a opção
WAIT_AT_LOW_PRIORITY. Com ela, você pode controlar o comportamento da operação de índice online quando há bloqueios concorrentes, garantindo que o sistema continue fluindo enquanto a operação espera de forma “educada”.Como funciona?
Ao usar
WAIT_AT_LOW_PRIORITY, a operação de índice:- Espera por bloqueios usando prioridade baixa
- Permite que outras transações de prioridade normal continuem executando normalmente
- Só será iniciada se conseguir adquirir os bloqueios necessários dentro de um tempo limite (MAX_DURATION)
Caso o tempo de espera exceda, você define o que deve acontecer com a operação usando a cláusula
ABORT_AFTER_WAIT.
Sintaxe
WAIT_AT_LOW_PRIORITY (
MAX_DURATION = <tempo_em_minutos>,
ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS]
)Parâmetros:
MAX_DURATION: tempo máximo (em minutos) que a operação vai aguardar em baixa prioridade antes de agir. A palavra minutes é opcional e pode ser omitida.ABORT_AFTER_WAIT:NONE: continua esperando com prioridade normal.SELF: cancela a própria operação de índice.BLOCKERS: termina as sessões de usuário que estão bloqueando a operação.
Exemplo
CREATE INDEX IX_Clientes_Email ON dbo.Clientes(Email) WITH ( ONLINE = ON, WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 10, ABORT_AFTER_WAIT = SELF ) );A operação de índice tentará adquirir os bloqueios necessários por até 10 minutos em baixa prioridade. Se não conseguir, ela será cancelada automaticamente (
SELF).
Monitorando a operação
Você pode acompanhar o comportamento das operações que usam
WAIT_AT_LOW_PRIORITYpor meio dos seguintes eventos estendidos:lock_request_priority_state: mostra o estado de prioridade da requisição de bloqueio.process_killed_by_abort_blockers: indica quando processos foram encerrados pela opçãoBLOCKERS.ddl_with_wait_at_low_priority: rastreia comandos DDL que utilizam a cláusula.
Conclusão
A opção
WAIT_AT_LOW_PRIORITYé um poderoso recurso do SQL Server que permite equilibrar manutenção proativa de índices com a manutenção da performance do sistema em tempo real. Ao usá-la corretamente, você evita bloqueios desnecessários, melhora a experiência dos usuários e mantém a integridade das operações administrativas.Se você lida com tabelas grandes e ambientes com alta carga, considere implementar essa opção em seus scripts de manutenção. Ela pode ser a chave para um ambiente mais estável e previsível.
-
Guia do Mochileiro para manter seu SQL Server Always On
No último final de semana, tive a satisfação de entregar mais uma palestra em companhia do meu amigo e colega de trabalho Marcelo Adade no SQL Saturday Jacksonville.
Nesta sessão, vamos nos aprofundar no universo dos Grupos de Disponibilidade Always On do SQL Server e explorar as práticas recomendadas para manter seu SQL Server Always On, combinando também outros recursos. Abordaremos os principais componentes de uma implantação Always On, incluindo configuração de cluster, configurações de rede, configuração de banco de dados e monitoramento. Também discutiremos problemas comuns que podem afetar a disponibilidade do seu ambiente SQL Server e como lidar com eles.
Caso você queira baixar os materiais da palestra, elas estão disponíveis aqui.

-
Série What’s New on SQL Server 2022 – Operações ADD CONSTRAINT Resumable
Com o lançamento do SQL Server 2022, Azure SQL Database e Azure SQL Managed Instance, os administradores e desenvolvedores de banco de dados ganharam uma poderosa funcionalidade: operações resumable (resumable operations) para o comando
ALTER TABLE ... ADD CONSTRAINT.Essa novidade amplia as possibilidades de manutenção em tabelas grandes e melhora em muito a resiliência em ambientes de missão crítica.
O que são operações resumable?
As operações resumable permitem que comandos longos e pesados, como a criação ou reconstrução de índices e a partir de agora, a adição de constraints, sejam pausados, retomados ou continuados em caso de falhas. Isso oferece mais flexibilidade em ambientes que exigem alta disponibilidade e pouco tempo de manutenção.
Os índices resumable já estavam disponíveis para:
- Criação e reconstrução de índices online (
CREATE INDEX/ALTER INDEX) - Compatível com SQL Server 2019, Azure SQL Database e Managed Instance
E agora foi estendido para:
ALTER TABLE ADD CONSTRAINTcom chavesPRIMARY KEYeUNIQUE KEY- Exclusivo no SQL Server 2022 em diante
Como funciona na prática?
A operação de
ALTER TABLE ADD CONSTRAINTpode demorar horas em tabelas grandes, e antes, qualquer falha exigia reiniciar todo o processo. Com a nova funcionalidade, é possível:- Pausar e retomar a operação dentro de janelas de manutenção.
- Continuar após falhas como quedas de conexão, failover ou falta de espaço em disco.
- Evitar sobrecarga nos logs de transação, mesmo com pouco espaço disponível.
Requisitos necessários
- O comando deve ser executado com a opção
ONLINE = ON - Só se aplica a
PRIMARY KEYeUNIQUE KEY - Não há suporte para
FOREIGN KEY
Exemplo de uso
ALTER TABLE dbo.Clientes
ADD CONSTRAINT PK_Clientes PRIMARY KEY CLUSTERED (ID)
WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 60);ONLINE = ON: mantém a tabela disponível durante a operação.RESUMABLE = ON: ativa a operação recomeçável.MAX_DURATION = 60: pausa a operação automaticamente após 60 minutos.
Como pausar, retomar ou cancelar a operação
Para pausar, retomar ou cancelar a operação resumable, use os comandos do
ALTER INDEXcomo no exemplo abaixo:--
Pausar
ALTER INDEX PK_Clientes ON dbo.Clientes PAUSE;
-- Retomar
ALTER INDEX PK_Clientes ON dbo.Clientes RESUME;
-- Abortar
ALTER INDEX PK_Clientes ON dbo.Clientes ABORT;
Considerações finais
Essa novidade representa um grande avanço para quem administra bases de dados VLDB (Very Large Databases), especialmente em ambientes que não podem se dar ao luxo de longas janelas de indisponibilidade. As operações resumable trazem resiliência, flexibilidade e melhor aproveitamento dos recursos do servidor.
Quer mais dicas de T-SQL ou boas práticas para ambientes de alta disponibilidade? Deixe um comentário ou entre em contato!
- Criação e reconstrução de índices online (
-
SQL Server 2022 – What’s NEw – Always Encrypted with secure enclaves
A inclusão do Always Encrypted with Secure Enclaves aprimora os recursos de computação confidencial desse recurso. Ele permite criptografia local e oferece opções mais robustas para conduzir consultas confidenciais. O Always Encrypted com enclaves seguros tem suporte no SQL Server 2019 (15.x) e versões posteriores, bem como no Banco de Dados SQL do Azure.
O Always Encrypted, que foi introduzido pela primeira vez no Banco de Dados SQL do Azure em 2015 e posteriormente no SQL Server 2016 (13.x), protege dados confidenciais contra malware e usuários não autorizados com altos privilégios, como administradores de banco de dados (DBAs), administradores de computador, administradores de nuvem , ou quaisquer outros indivíduos que tenham acesso legítimo a instâncias de servidor, hardware, etc., mas não devam ter acesso a dados específicos ou a todos os dados.
Always Encrypted, conforme discutido aqui, fornece proteção de dados criptografando no lado do cliente e garantindo que nem os dados nem as chaves criptográficas sejam expostos em texto simples no Mecanismo de Banco de Dados. Conseqüentemente, os recursos para trabalhar com colunas criptografadas no banco de dados são significativamente limitados. O Mecanismo de Banco de Dados só é capaz de realizar comparações de igualdade em dados criptografados, e isso só é possível com criptografia determinística. Quaisquer outras operações, como operações criptográficas (como criptografia inicial de dados ou rotação de chaves) e consultas mais complexas (como correspondência de padrões), não são suportadas no banco de dados. Para realizar essas operações, os usuários devem transferir seus dados para fora do banco de dados e realizá-los no lado do cliente.
As limitações associadas à criptografia de dados são resolvidas de forma eficaz pela implementação do Always Encrypted com enclaves seguros. Esta abordagem permite que certos cálculos sejam realizados em dados de texto simples dentro de um enclave seguro localizado no lado do servidor. O enclave seguro, que existe como uma área protegida de memória dentro do processo do Mecanismo de Banco de Dados, é completamente isolado do restante do Mecanismo de Banco de Dados e de outros processos na máquina host. Funciona como uma caixa impenetrável, impermeável à inspeção externa ou a tentativas de depuração. Consequentemente, o enclave seguro serve como um ambiente de execução confiável que pode acessar com segurança dados confidenciais e chaves criptográficas em texto simples, ao mesmo tempo que mantém o nível máximo de confidencialidade dos dados.
O diagrama abaixo demonstra a utilização de enclaves seguros na implementação do Always Encrypted.
Ao examinar uma instrução Transact-SQL fornecida por um aplicativo, o Mecanismo de Banco de Dados avalia se a instrução inclui quaisquer ações executadas em dados criptografados que exijam a utilização do enclave seguro. No caso de tais declarações:
Para garantir a execução segura, o driver cliente transmite com segurança as chaves de criptografia de coluna necessárias para o enclave seguro e envia a instrução para execução.
O enclave seguro é responsável por manipular operações criptográficas e cálculos em colunas criptografadas quando o Mecanismo de Banco de Dados processa a instrução. Nos casos em que a descriptografia é necessária, o enclave descriptografa os dados e realiza cálculos no texto simples.
No processo de processamento de instruções, o Mecanismo de Banco de Dados garante que nem os dados nem as chaves de criptografia de coluna sejam expostos em texto simples fora do enclave seguro.