Compartir a través de


Origen de datos

En la sección se data-source definen los detalles del acceso a la base de datos. También define las opciones de la base de datos.

Configuración del origen de datos

Property Description
origen de datos Objeto que contiene la configuración de conectividad de la base de datos
data-source.database-type Base de datos usada en el back-end: mssql, postgresql, mysql, , cosmosdb_nosql, cosmosdb_postgresql
data-source.connection-string Cadena de conexión para el tipo de base de datos seleccionado
data-source.options Propiedades específicas de la base de datos (por ejemplo, opciones para SQL Server, Cosmos DB, etc.)
data-source.options.database Nombre de la base de datos de Azure Cosmos DB para NoSQL (se requiere cuando database-type = cosmosdb_nosql)
data-source.options.container Nombre del contenedor de Azure Cosmos DB para NoSQL (necesario cuando database-type = cosmosdb_nosql)
data-source.options.schema Ruta de acceso al archivo de esquema graphQL (obligatorio cuando database-type = cosmosdb_nosql)
data-source.options.set-session-context Habilita el envío de notificaciones de JSON Web Token (JWT) como contexto de sesión (solo SQL Server)
data-source.health Objeto que configura comprobaciones de estado para el origen de datos
data-source.health.enabled Habilita el punto de conexión de comprobación de estado
data-source.health.name Identificador usado en el informe de estado
data-source.health.threshold-ms Duración máxima en milisegundos para la consulta de comprobación de estado
data-source.user-delegated-auth Objeto que configura la autenticación delegada por el usuario (solo mssql)Behalf-Of (OBO)
data-source.user-delegated-auth.enabled Habilita la autenticación de OBO
data-source.user-delegated-auth.provider Proveedor de identidades de OBO (actualmente EntraId solo)
data-source.user-delegated-auth.database-audience Audiencia de destino para el token de SQL de nivel inferior

Introducción al formato

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      // mssql only
      "set-session-context": <true> (default) | <false>,
      // cosmosdb_nosql only
      "database": <string>,
      "container": <string>,
      "schema": <string>
    },
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    },
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  },
  "data-source-files": ["<string>"]
}

Origen de datos

Parent Property Type Required Default
$root data-source object ✔️ Sí -

Propiedades anidadas

Parent Property Type Required Default
data-source database-type enum ✔️ Sí None
data-source connection-string string ✔️ Sí None
data-source options object ❌ No None

Valores de propiedad

database-type Description Versión mínima
mssql SQL en Fabric -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Fabric Warehouse -
dwsql Punto de conexión de SQL Analytics de Fabric -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB para NoSQL -
cosmosdb_postgresql Azure Cosmos DB para PostgreSQL -

Format

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "<key-name>": <string>
    }
  }
}

Ejemplo: Azure SQL & SQL Server

"data-source": {
  "database-type": "mssql",
  "connection-string": "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
    "options": {
      "set-session-context": true
    }
}

Note

SqlClient Usamos para Azure SQL y SQL Server, que admite estas variantes de cadenas de conexión.

Consumir SESSION_CONTEXT

Para Azure SQL y SQL Server, el generador de API de datos puede incluir información de notificaciones en sql.SESSION_CONTEXT

CREATE PROC GetUser @userId INT AS
BEGIN
    -- Use claims
    IF SESSION_CONTEXT(N'user_role') = 'admin' 
    BEGIN
        RAISERROR('Unauthorized access', 16, 1);
    END

    SELECT Id, Name, Age, IsAdmin
    FROM Users
    WHERE Id = @userId;
END;

Ejemplo: Azure Cosmos DB

"data-source": {
  "database-type": "cosmosdb_nosql",
  "connection-string": "@env('SQL_CONNECTION_STRING')",
  "options": {
    "database": "Your_CosmosDB_Database_Name",
    "container": "Your_CosmosDB_Container_Name",
    "schema": "Path_to_Your_GraphQL_Schema_File"
  }
}

Note

Las "opciones" especificadas (database, containery schema) son específicas de Azure Cosmos DB.

Variables de entorno

Use variables de entorno para mantener los secretos de texto sin formato del archivo de configuración.

Tip

Data API Builder admite tanto la función como .envlos @env() archivos.

"data-source": {
  "database-type": "mssql",
  "connection-string": "@env('SQL_CONNECTION_STRING')"
}

Resistencia de la conexión

Data API Builder usa retroceso exponencial para reintentar las solicitudes de base de datos después de errores transitorios.

Attempts First Second Third Fourth Fifth
Seconds 2s 4s 8s 16s 32s

Identidades de servicio administradas (MSI)

Las identidades de servicio administradas (MSI) se admiten con DefaultAzureCredential definidas en Azure.Identity la biblioteca. Obtenga más información sobre las identidades administradas en Microsoft Entra para Azure SQL.

User-Assigned identidades administradas (UAMI)

En Identidad administrada asignada por el usuario, anexe las propiedades Autenticación e Identificador de usuario a la cadena de conexión al sustituir en el identificador de cliente de la identidad administrada asignada por el usuario: Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

identidad administrada de System-Assigned (SAMI)

En Identidad administrada asignada por el sistema, anexe la propiedad Authentication y excluya los argumentos UserId y Password de la cadena de conexión: Authentication=Active Directory Managed Identity;.

Estado (origen de datos)

Parent Property Type Required Default
data-source health object No

Data API Builder admite varios archivos de configuración, cada uno con su propio origen de datos. Este bloque de configuración permite que cada origen de datos tenga su propia configuración de estado.

Propiedades anidadas

Parent Property Type Required Default
data-source.health enabled boolean No true
data-source.health name string No database-type
data-source.health threshold-ms integer No 1000

Comprobar nombre

Dado que varios archivos de configuración pueden apuntar a orígenes de datos del mismo tipo, esos orígenes de datos no se pueden distinguir en el informe de estado. Use name para asignar una etiqueta única y identificable que solo se usa en el informe de mantenimiento.

Comprobación del comportamiento

La consulta más sencilla posible,específica del tipo de base de datos, se ejecuta en el origen de datos especificado para validar que se puede abrir la conexión. Use la threshold-ms propiedad para configurar la duración máxima aceptable (en milisegundos) para que se complete esa consulta.

Format

{
  "data-source": {
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  }
}

Autenticación delegada por el usuario

Parent Property Type Required Default
data-source user-delegated-auth object No

Autenticación delegada por el usuario enBehalf-Of (OBO) para SQL Server y Azure SQL. Cuando está habilitada, DAB intercambia el token de usuario entrante para un token SQL de nivel inferior para que la base de datos se autentique como el usuario que realiza la llamada real. Esta característica solo se admite para mssql orígenes de datos y requiere la autenticación de Entra ID ascendente.

Note

La funcionalidad de Data API Builder 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.

Propiedades anidadas

Parent Property Type Required Default
data-source.user-delegated-auth enabled boolean No false
data-source.user-delegated-auth provider enumeración (EntraId) No EntraId
data-source.user-delegated-auth database-audience string Sí (cuando está habilitado) None
  • enabled— activa o desactiva OBO.
  • provider: el proveedor de identidades para el intercambio de tokens. Actualmente solo se admite EntraId.
  • database-audience: la audiencia de destino para el token de SQL de bajada (por ejemplo, https://database.windows.net).

Variables de entorno necesarias

Cuando OBO está habilitado, DAB lee las siguientes variables de entorno para el intercambio de tokens:

Variable Description
DAB_OBO_CLIENTID Id. de aplicación (cliente) del registro de la aplicación Entra ID
DAB_OBO_CLIENTSECRET Secreto de cliente para el registro de aplicaciones
DAB_OBO_TENANTID Identificador de inquilino de Entra ID

Agrupación de conexiones por usuario

Cuando OBO está habilitado, DAB mantiene grupos de conexiones SQL independientes por usuario para que el token de acceso de un usuario nunca se reutilice para la solicitud de otro usuario.

Note

La agrupación de conexiones por usuario solo se aplica cuando la autenticación de OBO está activa. Las implementaciones estándar no se ven afectadas.

Format

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  }
}

Ejemplo

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": true,
      "provider": "EntraId",
      "database-audience": "https://database.windows.net"
    }
  }
}

Importante

OBO solo se admite para mssql. La database-audience propiedad es necesaria cuando se habilita OBO. Al ejecutar esta configuración en un origen de datos que no sea MSSQL, se produce un error en la validación.