Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Essa referência aborda recursos, comportamentos e requisitos específicos para uma ou mais plataformas de banco de dados compatíveis com o DAB (Construtor de API de Dados). Para obter uma matriz de comparação de recursos entre bancos de dados, consulte a disponibilidade de recursos.
Suporte à versão do banco de dados
O DAB dá suporte às seguintes plataformas de banco de dados. Os requisitos mínimos de versão se aplicam a implantações autogerenciadas. Os bancos de dados PaaS (plataforma como serviço) não têm um requisito mínimo de versão porque o serviço gerencia a versão.
| Plataforma de banco de dados | Abreviação | Versão mínima | Observações |
|---|---|---|---|
| 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) | Somente GraphQL; nenhum ponto de extremidade REST |
| PostgreSQL | PGSQL | 11 | |
| MySQL | MySQL | 8 | |
| Azure Synapse Analytics (pool de SQL dedicado) | SQLDW | N/A (PaaS) | Não há suporte para o pool de SQL sem servidor |
Importante
Verifique se o banco de dados de desenvolvimento local e qualquer banco de dados implantado atendem ao requisito mínimo de versão. O DAB se conecta usando o mesmo driver em ambos os ambientes. Uma versão mais antiga em qualquer local causa erros de runtime.
SQL Server e SQL do Azure
SESSION_CONTEXT
Para SQL Server e SQL do Azure, o DAB pode propagar declarações de usuário autenticadas para o banco de dados chamando sp_set_session_context antes de executar cada consulta. Esse mecanismo permite que políticas de segurança de nível de linha nativas do SQL e procedimentos armazenados leiam a identidade do chamador de dentro do mecanismo de banco de dados.
Quando set-session-context estiver habilitado na configuração do DAB, o DAB enviará todas as declaraçõ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 declarações comuns enviadas incluem roles, sube oidquaisquer declarações personalizadas que seu provedor de identidade inclua no JWT.
Habilitar 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 defina a propriedade diretamente em dab-config.json:
{
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')",
"options": {
"set-session-context": true
}
}
}
Aviso
Habilitar set-session-context desabilita o cache de resposta para essa fonte de dados. Como cada solicitação define valores de sessão distintos, as respostas armazenadas em cache da sessão de um usuário não devem ser atendidas para outra.
Usar SESSION_CONTEXT no SQL
Depois de habilitar set-session-context, seus objetos SQL podem ler os valores de declaração:
-- 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 obter um passo a passo completo, consulte Implementar segurança em nível de linha com contexto de sessão.
SESSION_CONTEXT e pool de conexões
O DAB redefine todos os valores de contexto de sessão no início de cada solicitação. No entanto, como set-session-context força a semântica de conexão por usuário, a reutilização da conexão entre usuários é evitada automaticamente quando essa opção está habilitada.
Variantes da cadeia de conexão
O DAB usa Microsoft.Data.SqlClient o SQL Server e o SQL do Azure. A biblioteca dá suporte a esses formatos de cadeia de conexão.
Formatos comuns:
| Método de autenticação | Padrão de cadeia de conexão |
|---|---|
| Logon do SQL | 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 gerenciada atribuída pelo usuário | Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>; |
| Credencial padrão do Azure | Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default; |
Dica
Armazene cadeias de conexão em variáveis de ambiente e faça referência a elas com @env('SQL_CONNECTION_STRING'). Para implantações de produção, armazene a cadeia de conexão no Azure Key Vault e faça referência a ela.@akv()
Tipos de dados sem suporte
Os seguintes tipos de dados SQL Server e SQL do Azure não são compatíveis com o DAB:
| Tipo de dados | Reason |
|---|---|
geography |
Tipo geoespacial; serialização sem suporte |
geometry |
Tipo espacial planar; serialização sem suporte |
hierarchyid |
Tipo de dados hierárquico; serialização sem suporte |
json |
Tipo JSON nativo (atualmente em versão prévia) |
rowversion |
Tipo de controle de versão de linha; não incluído nas respostas da API |
sql_variant |
Colunas de tipo variável; inferência de tipo sem suporte |
vector |
Tipo de vetor (atualmente em versão prévia) |
xml |
Tipo XML; serialização sem suporte |
Azure Cosmos DB for NoSQL
Requisito de esquema
Ao contrário dos bancos de dados relacionais, o Azure Cosmos DB para NoSQL é independente de esquema. O DAB não pode introspectar um contêiner do Cosmos DB para gerar tipos de GraphQL. Você deve fornecer um arquivo de esquema GraphQL (.gql) que defina sua estrutura de documentos.
O arquivo de esquema usa sdl (linguagem de definição de esquema) do GraphQL padrão 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 |
Diretiva @model
A @model(name: "...") diretiva é necessária em todos os tipos de GraphQL que você expõe por meio do DAB. O name valor deve corresponder exatamente ao nome da entidade no arquivo de configuração do DAB.
type Book @model(name: "Book") {
id: ID
title: String
year: Int
}
Diretiva @authorize
A @authorize diretiva fornece controle de acesso em nível de campo e de tipo para consultas Do GraphQL do Cosmos DB. Ele aceita um roles parâmetro listando as funções que podem acessar o campo ou o tipo.
type Book @model(name: "Book") {
id: ID
title: String @authorize(roles: ["authenticated", "librarian"])
internalNotes: String @authorize(roles: ["editor"])
}
Você também pode aplicar @authorize no nível de tipo:
type InternalReport @model(name: "InternalReport") @authorize(roles: ["auditor"]) {
id: ID
summary: String
}
Importante
A @authorize diretiva adiciona permissões no nível da entidade. A diretiva e o bloco de permissão da entidade devem permitir que a solicitação de acesso seja bem-sucedida. Se um campo tiver @authorize(roles: ["editor"]) , mas a entidade não tiver nenhuma entrada de permissão, editora solicitação será negada.
Observação
Não há suporte para @authorize(policy: "..."). Use @authorize(roles: [...]) apenas.
Para obter um guia de instalação completo, consulte Configurar o construtor de API de Dados para o Azure Cosmos DB para NoSQL.
Indisponibilidade da API REST
O DAB não gera pontos de extremidade REST para o Azure Cosmos DB para NoSQL. O Azure Cosmos DB fornece uma API REST nativa abrangente para operações de documento. Somente pontos de extremidade do GraphQL são gerados. Documentos OpenAPI não são gerados para entidades do Cosmos DB.
Para acessar dados pelo REST, use a API REST do Azure Cosmos DB diretamente.
Recursos sem suporte para o Cosmos DB
Não há suporte para os seguintes recursos para o Azure Cosmos DB para NoSQL:
| Característica | Observações |
|---|---|
| Pontos de extremidade REST | Em vez disso, use a API REST do Cosmos DB nativa |
| Políticas de banco de dados | Predicados de política exigem semântica de consulta relacional |
| Procedimentos armazenados | Não há suporte como entidades da DAB |
| Relationships | Não há suporte para relações entre contêineres |
Classificação ($orderby) |
Não há suporte para consultas GraphQL |
| Agregação | Sem suporte |
| Várias mutações | Sem suporte |
| Contexto de sessão | Recurso específico do SQL |
PostgreSQL
Versão mínima
PostgreSQL 11 ou posterior é necessário. O DAB usa Npgsql como driver PostgreSQL.
Tipos de dados sem suporte
Os seguintes tipos de dados PostgreSQL não são compatíveis com o DAB:
| Tipo de dados | Observações |
|---|---|
bytea |
Cadeia de caracteres binária; serialização sem suporte |
date |
Utilizar timestamp ou timestamptz |
smalldatetime |
Não é um tipo postgreSQL nativo |
datetime2 |
Não nativo; normalmente manipulado por timestamp |
timestamptz |
Carimbo de data/hora com fuso horário; sem suporte |
time |
Hora do dia sem data |
localtime |
Hora baseada no relógio do sistema |
Procedimentos armazenados
Não há suporte para procedimentos armazenados para entidades postgreSQL. Em vez disso, use tabelas e exibições.
MySQL
Versão mínima
MySQL 8 ou posterior é necessário.
Tipos de dados sem suporte
Os seguintes tipos de dados MySQL não são compatíveis com o DAB:
| Tipo de dados | Observações |
|---|---|
UUID |
Identificadores universalmente exclusivos |
DATE |
Datas do calendário |
SMALLDATETIME |
Armazenamento de data e hora menos preciso |
DATETIME2 |
Não nativo; Usar datetime |
DATETIMEOFFSET |
Datas e horários com fuso horário |
TIME |
Hora do dia sem data |
LOCALTIME |
Hora atual com base no relógio do sistema |
Procedimentos armazenados
Não há suporte para procedimentos armazenados para entidades MySQL. Em vez disso, use tabelas.
Azure Synapse Analytics (pool de SQL dedicado)
Objetos com suporte
O pool de SQL dedicado dá suporte a tabelas, exibições e procedimentos armazenados, o mesmo que o SQL Server e o SQL do Azure. Não há suporte para o pool de SQL sem servidor.
Recursos sem suporte
| Característica | Observações |
|---|---|
| Várias mutações | Sem suporte |