Compartir a través de


Referencia de características específicas de la base de datos para Data API Builder

En esta referencia se tratan las características, los comportamientos y los requisitos específicos de una o varias plataformas de base de datos compatibles con Data API Builder (DAB). Para obtener una matriz de comparación de características entre bases de datos, consulte Disponibilidad de características.

Compatibilidad con la versión de la base de datos

DAB admite las siguientes plataformas de base de datos. Los requisitos mínimos de versión se aplican a las implementaciones autoadministrados. Las bases de datos de plataforma como servicio (PaaS) no tienen un requisito de versión mínimo porque el servicio administra la versión.

Plataforma de base de datos Abreviatura Versión mínima Notas
SQL Server Familia SQL 2016
Azure SQL Familia SQL N/A (PaaS)
Microsoft Fabric SQL Familia SQL N/A (PaaS)
Azure Cosmos DB para NoSQL Cosmos DB N/A (PaaS) Solo GraphQL; ningún punto de conexión REST
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (grupo de SQL dedicado) SQLDW N/A (PaaS) No se admite el grupo de SQL sin servidor

Importante

Compruebe que tanto la base de datos de desarrollo local como cualquier base de datos implementada cumplen el requisito de versión mínima. DAB se conecta mediante el mismo controlador en ambos entornos. Una versión anterior en cualquiera de las ubicaciones produce errores en tiempo de ejecución.

SQL Server y Azure SQL

SESSION_CONTEXT

Para SQL Server y Azure SQL, DAB puede propagar notificaciones de usuario autenticadas a la base de datos llamando sp_set_session_context a antes de ejecutar cada consulta. Este mecanismo permite que las directivas de seguridad de nivel de fila nativas de SQL y los procedimientos almacenados lean la identidad del autor de la llamada desde el motor de base de datos.

Cuando set-session-context está habilitado en la configuración de DAB, DAB envía todas las notificaciones autenticadas como pares clave-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;

Las notificaciones comunes enviadas incluyen roles, sub, oidy cualquier notificación personalizada que incluya el proveedor de identidades en el JWT.

Habilitar SESSION_CONTEXT

Establecer --set-session-context true al llamar a dab init:

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

O bien, establezca la propiedad directamente en dab-config.json:

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

Advertencia

set-session-context Habilitar deshabilita el almacenamiento en caché de respuestas para ese origen de datos. Dado que cada solicitud establece valores de sesión distintos, las respuestas almacenadas en caché de una sesión de un usuario no deben servirse a otra.

Uso de SESSION_CONTEXT en SQL

Después de habilitar set-session-context, los objetos SQL pueden leer los valores de notificación:

-- 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 ver un tutorial completo, consulte Implementación de la seguridad de nivel de fila con el contexto de sesión.

SESSION_CONTEXT y agrupación de conexiones

DAB restablece todos los valores de contexto de sesión al principio de cada solicitud. Sin embargo, dado que set-session-context fuerza la semántica de conexión por usuario, la reutilización de conexiones entre los usuarios se evita automáticamente cuando esta opción está habilitada.

Variantes de cadena de conexión

DAB usa Microsoft.Data.SqlClient para SQL Server y Azure SQL. La biblioteca admite estos formatos de cadena de conexión.

Formatos comunes:

Método de autenticación Patrón de cadena de conexión
Inicio de sesión de SQL Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Identidad administrada Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Identidad Administrada Asignada por el Usuario Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Credencial predeterminada de Azure Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Sugerencia

Almacene cadenas de conexión en variables de entorno y haga referencia a ellas con @env('SQL_CONNECTION_STRING'). Para las implementaciones de producción, almacene la cadena de conexión en Azure Key Vault y haga referencia a ella con @akv().

Tipos de datos no admitidos

DAB no admite los siguientes tipos de datos de SQL Server y Azure SQL:

Tipo de dato Motivo
geography Tipo geoespacial; serialización no admitida
geometry Tipo espacial planar; serialización no admitida
hierarchyid Tipo de datos jerárquico; serialización no admitida
json Tipo JSON nativo (actualmente en versión preliminar)
rowversion Tipo de control de versiones de fila; no se incluye en las respuestas de API
sql_variant Columnas de tipo variable; no se admite la inferencia de tipos
vector Tipo de vector (actualmente en versión preliminar)
xml Tipo XML; serialización no admitida

Azure Cosmos DB para NoSQL

Requisito de esquema

A diferencia de las bases de datos relacionales, Azure Cosmos DB para NoSQL es independiente del esquema. DAB no puede introspecar un contenedor de Cosmos DB para generar tipos graphQL. Debe proporcionar un archivo de esquema graphQL (.gql) que defina la estructura del documento.

El archivo de esquema usa el lenguaje de definición de esquema (SDL) de GraphQL estándar con dos directivas personalizadas:

Directiva Obligatorio Description
@model Asigna un tipo GraphQL a un nombre de entidad DAB
@authorize No Restringe el acceso de campo o tipo a roles específicos.

directiva @model

La @model(name: "...") directiva es necesaria en cada tipo de GraphQL que exponga a través de DAB. El name valor debe coincidir exactamente con el nombre de la entidad en el archivo de configuración de DAB.

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

directiva @authorize

La @authorize directiva proporciona control de acceso de nivel de campo y de tipo para consultas GraphQL de Cosmos DB. Acepta un roles parámetro que enumera los roles que pueden tener acceso al campo o al tipo.

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

También puede aplicar @authorize en el nivel de tipo:

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

Importante

La @authorize directiva agrega a los permisos de nivel de entidad. Tanto la directiva como el bloque de permisos de la entidad deben permitir que la solicitud de acceso se realice correctamente. Si un campo tiene pero la entidad no tiene @authorize(roles: ["editor"]) ninguna entrada de permiso para editor, se deniega la solicitud.

Nota:

@authorize(policy: "...") no es compatible. Use @authorize(roles: [...]) solo.

Para obtener una guía de configuración completa, consulte Configuración de Data API Builder para Azure Cosmos DB para NoSQL.

Falta de disponibilidad de la API REST

DAB no genera puntos de conexión REST para Azure Cosmos DB para NoSQL. Azure Cosmos DB proporciona una API REST nativa completa para las operaciones de documentos. Solo se generan puntos de conexión de GraphQL. Los documentos openAPI no se generan para las entidades de Cosmos DB.

Para acceder a los datos a través de REST, use directamente la API REST de Azure Cosmos DB .

Características no admitidas para Cosmos DB

No se admiten las siguientes características para Azure Cosmos DB para NoSQL:

Feature Notas
Puntos de conexión REST En su lugar, use la API REST nativa de Cosmos DB.
Directivas de base de datos Los predicados de directiva requieren semántica de consultas relacionales
Procedimientos almacenados No se admite como entidades DAB
Relationships No se admiten relaciones entre contenedores
Ordenación ($orderby) No se admite en consultas de GraphQL
Agregación No soportado
Varias mutaciones No soportado
Contexto de sesión Característica específica de SQL

PostgreSQL

Versión mínima

Se requiere PostgreSQL 11 o posterior. DAB usa Npgsql como controlador postgreSQL.

Tipos de datos no admitidos

DAB no admite los siguientes tipos de datos de PostgreSQL:

Tipo de dato Notas
bytea Cadena binaria; serialización no admitida
date Usar timestamp o timestamptz
smalldatetime No es un tipo de PostgreSQL nativo
datetime2 No nativo; Normalmente, se controla mediante timestamp
timestamptz Marca de tiempo con zona horaria; no compatible
time Hora del día sin fecha
localtime Tiempo basado en el reloj del sistema

Procedimientos almacenados

Los procedimientos almacenados no se admiten para las entidades de PostgreSQL. En su lugar, use tablas y vistas.

MySQL

Versión mínima

Se requiere MySQL 8 o posterior.

Tipos de datos no admitidos

DAB no admite los siguientes tipos de datos mySQL:

Tipo de dato Notas
UUID Identificadores únicos universalmente
DATE Fechas del calendario
SMALLDATETIME Almacenamiento de fecha y hora menos precisos
DATETIME2 No nativo; usar datetime
DATETIMEOFFSET Fechas y horas con zona horaria
TIME Hora del día sin fecha
LOCALTIME Hora actual basada en el reloj del sistema

Procedimientos almacenados

Los procedimientos almacenados no se admiten para las entidades MySQL. En su lugar, use tablas.

Azure Synapse Analytics (grupo de SQL dedicado)

Objetos compatibles

El grupo de SQL dedicado admite tablas, vistas y procedimientos almacenados, igual que SQL Server y Azure SQL. No se admite el grupo de SQL sin servidor.

Características no admitidas

Feature Notas
Varias mutaciones No soportado