Partilhar via


Referência de funcionalidades específicas da base de dados para o Data API builder

Esta referência abrange funcionalidades, comportamentos e requisitos específicos de uma ou mais plataformas de bases de dados suportadas pelo Data API builder (DAB). Para uma matriz de comparação de funcionalidades entre bases de dados, consulte Disponibilidade de funcionalidades.

Suporte à versão do banco de dados

O DAB suporta as seguintes plataformas de bases de dados. Os requisitos mínimos de versão aplicam-se a implementações autogeridas. As bases de dados Platform-as-a-Service (PaaS) não têm um requisito mínimo de versão porque o serviço gere essa versão.

Plataforma de base de dados Abreviatura Versão mínima Notes
SQL Server Família SQL 2016
SQL do Azure Família SQL N/A (PaaS)
Microsoft Fabric SQL Família SQL N/A (PaaS)
Azure Cosmos DB for NoSQL Cosmos DB N/A (PaaS) Apenas GraphQL; sem endpoints REST
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (Dedicated SQL pool) SQLDW N/A (PaaS) Pool SQL serverless não é suportado

Importante

Verifique se tanto a sua base de dados local de desenvolvimento como qualquer base de dados implementada cumprem o requisito mínimo de versão. O DAB liga-se usando o mesmo driver em ambos os ambientes. Uma versão mais antiga em qualquer um dos locais causa erros de execução.

SQL Server e Azure SQL

SESSION_CONTEXT

Para SQL Server e Azure SQL, o DAB pode propagar reivindicações autenticadas do utilizador para a base de dados chamando sp_set_session_context antes de executar cada consulta. Este mecanismo permite que políticas de segurança nativas SQL ao nível de linha e procedimentos armazenados leiam a identidade do chamador a partir do motor da base de dados.

Quando set-session-context está ativado na configuração DAB, o DAB envia todas as reivindicações autenticadas como pares-chave-valor:

EXEC sp_set_session_context 'roles', 'editor', @read_only = 0;
EXEC sp_set_session_context 'oid', 'a1b2c3d4-...', @read_only = 0;
-- Your query executes after claims are set
SELECT * FROM dbo.Documents;

As reclamações comuns enviadas incluem roles, sub, oid, e quaisquer reivindicações personalizadas que o seu fornecedor de identidade inclua no JWT.

Ativar SESSION_CONTEXT

Definir --set-session-context true ao chamar dab init:

dab init \
  --database-type mssql \
  --connection-string "@env('SQL_CONNECTION_STRING')" \
  --set-session-context true

Ou definir a propriedade diretamente em dab-config.json:

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "options": {
      "set-session-context": true
    }
  }
}

Advertência

Ativar set-session-context desativa a cache de resposta para essa fonte de dados. Como cada pedido define valores de sessão distintos, as respostas em cache da sessão de um utilizador não podem ser servidas a outro.

Usar SESSION_CONTEXT em SQL

Depois de ativar set-session-context, os seus objetos SQL podem ler os valores das reivindicações:

-- Read a claim in a stored procedure
DECLARE @role NVARCHAR(256) = CAST(SESSION_CONTEXT(N'roles') AS NVARCHAR(256));

-- Use a claim in a row-level security predicate function
CREATE FUNCTION dbo.RlsPredicate(@claimRole NVARCHAR(256))
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN SELECT 1 AS result
WHERE @claimRole = CAST(SESSION_CONTEXT(N'roles') AS NVARCHAR(256));

Para um guia completo, consulte Implementar segurança ao nível da linha com contexto de sessão.

SESSION_CONTEXT e pooling de ligações

O DAB reinicia todos os valores do contexto da sessão no início de cada pedido. No entanto, como set-session-context força a semântica de ligação por utilizador, a reutilização de ligação entre utilizadores é evitada automaticamente quando esta opção está ativada.

Variantes de cordas de ligação

O DAB usa Microsoft.Data.SqlClient SQL Server e Azure SQL. A biblioteca suporta estes formatos de string de ligação.

Formatos comuns:

Método de autenticação Padrão de cordas de ligação
SQL Login Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Identidade gerenciada Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Identidade Gerida Atribuída pelo Utilizador Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Default Azure credential Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Sugestão

Armazene strings de ligação em variáveis de ambiente e referencia-as com @env('SQL_CONNECTION_STRING'). Para implementações em produção, armazene a cadeia de ligação no Azure Key Vault e referencia-a com @akv().

Tipos de dados não suportados

Os seguintes tipos de dados SQL Server e Azure SQL não são suportados pelo DAB:

Tipo de dados Justificação
geography Tipo geoespacial; Serialização não suportada
geometry Tipo espacial planar; Serialização não suportada
hierarchyid Tipo de dado hierárquico; Serialização não suportada
json Tipo JSON nativo (atualmente em pré-visualização)
rowversion Tipo de versão por linha; não incluído nas respostas da API
sql_variant Colunas de tipo variável; Inferência de tipo não suportada
vector Tipo de vetor (atualmente em pré-visualização)
xml Tipo XML; Serialização não suportada

Azure Cosmos DB for NoSQL

Requisito de esquema

Ao contrário das bases de dados relacionais, o Azure Cosmos DB para NoSQL é independente do esquema. O DAB não pode introspeção de um contentor Cosmos DB para gerar tipos GraphQL. Deve fornecer um ficheiro de esquema GraphQL (.gql) que defina a estrutura do seu documento.

O ficheiro de esquema utiliza a Linguagem de Definição de Esquemas (SDL) padrão GraphQL com duas diretivas personalizadas:

Diretiva Obrigatório Description
@model Sim Mapeia um tipo GraphQL para um nome de entidade DAB
@authorize No Restringe o acesso de campo ou tipo a funções específicas

@model diretiva

A @model(name: "...") diretiva é exigida em todos os tipos de GraphQL que expões através do DAB. O name valor deve corresponder exatamente ao nome da entidade no seu ficheiro de configuração DAB.

type Book @model(name: "Book") {
  id: ID
  title: String
  year: Int
}

@authorize diretiva

A @authorize diretiva fornece controlo de acesso ao nível de campo e de tipo para consultas Cosmos DB GraphQL. Aceita um roles parâmetro que lista os papéis que podem aceder ao campo ou tipo.

type Book @model(name: "Book") {
  id: ID
  title: String @authorize(roles: ["authenticated", "librarian"])
  internalNotes: String @authorize(roles: ["editor"])
}

Também pode candidatar-se @authorize ao nível do tipo:

type InternalReport @model(name: "InternalReport") @authorize(roles: ["auditor"]) {
  id: ID
  summary: String
}

Importante

A @authorize diretiva acrescenta permissões ao nível da entidade. Tanto a diretiva como o bloco de permissões da entidade devem permitir que o pedido de acesso tenha sucesso. Se um campo tiver @authorize(roles: ["editor"]) mas a entidade não tiver permissão para editor, o pedido é negado.

Observação

@authorize(policy: "...") não é suportado. Utilizar @authorize(roles: [...]) apenas.

Para um guia completo de configuração, consulte Configurar o construtor de API de dados para Azure Cosmos DB para NoSQL.

Indisponibilidade da API REST

O DAB não gera endpoints REST para Azure Cosmos DB para NoSQL. O Azure Cosmos DB fornece uma API nativa REST abrangente para operações de documentos. Apenas os endpoints GraphQL são gerados. Os documentos OpenAPI não são gerados para entidades do Cosmos DB.

Para aceder a dados através do REST, use diretamente a API REST da base de dados do Azure Cosmos .

Funcionalidades não suportadas para o Cosmos DB

As seguintes funcionalidades não são suportadas para o Azure Cosmos DB para NoSQL:

Feature Notes
Pontos finais REST Usa antes a API REST nativa da base de dados da Cosmos
Políticas de base de dados Os predicados de política requerem semântica de consulta relacional
Procedimentos armazenados Não suportado como entidades DAB
Relações Relações entre contentores não são suportadas
Ordenação ($orderby) Não suportado em consultas GraphQL
Agregação Não suportado
Mutações múltiplas Não suportado
Contexto da sessão Funcionalidade específica do SQL

PostgreSQL

Versão mínima

PostgreSQL 11 ou posterior é obrigatório. O DAB utiliza Npgsql como driver PostgreSQL.

Tipos de dados não suportados

Os seguintes tipos de dados PostgreSQL não são suportados pelo DAB:

Tipo de dados Notes
bytea String binário; Serialização não suportada
date Utilizar timestamp ou timestamptz
smalldatetime Não é um tipo nativo de PostgreSQL
datetime2 Não é nativo; normalmente tratado por timestamp
timestamptz Carimbo temporal com fuso horário; Não suportado
time Hora do dia sem data
localtime Tempo baseado no relógio do sistema

Procedimentos armazenados

Procedimentos armazenados não são suportados para entidades PostgreSQL. Usa tabelas e vistas em vez disso.

MySQL

Versão mínima

MySQL 8 ou posterior é obrigatório.

Tipos de dados não suportados

Os seguintes tipos de dados MySQL não são suportados pelo DAB:

Tipo de dados Notes
UUID Identificadores Universalmente Únicos
DATE Datas do calendário
SMALLDATETIME Armazenamento de data e hora menos preciso
DATETIME2 Não é nativo; Utilização datetime
DATETIMEOFFSET Datas e horários com fuso horário
TIME Hora do dia sem data
LOCALTIME Tempo atual baseado no relógio do sistema

Procedimentos armazenados

Os procedimentos armazenados não são suportados para entidades MySQL. Usa tabelas em vez disso.

Azure Synapse Analytics (Dedicated SQL pool)

Objetos suportados

O pool SQL dedicado suporta tabelas, vistas e procedimentos armazenados — tal como o SQL Server e o Azure SQL. O pool SQL serverless não é suportado.

Funcionalidades não suportadas

Feature Notes
Mutações múltiplas Não suportado