Partager via


Source de données

La data-source section définit les détails de l’accès à la base de données. Il définit également les options de base de données.

Paramètres de la source de données

Property Description
source de données Objet contenant les paramètres de connectivité de base de données
data-source.database-type Base de données utilisée dans le serveur principal : mssql, postgresql, mysql, cosmosdb_nosql, cosmosdb_postgresql
data-source.connection-string Chaîne de connexion pour le type de base de données sélectionné
data-source.options Propriétés spécifiques à la base de données (par exemple, options pour SQL Server, Cosmos DB, etc.)
data-source.options.database Nom de la base de données Azure Cosmos DB pour NoSQL (obligatoire lorsque database-type = cosmosdb_nosql)
data-source.options.container Nom du conteneur Azure Cosmos DB pour NoSQL (obligatoire quand database-type = cosmosdb_nosql)
data-source.options.schema Chemin d’accès au fichier de schéma GraphQL (obligatoire lorsque database-type = cosmosdb_nosql)
data-source.options.set-session-context Active l’envoi de revendications JSON Web Token (JWT) en tant que contexte de session (SQL Server uniquement)
data-source.health Objet configurant des vérifications d’intégrité pour la source de données
data-source.health.enabled Active le point de terminaison de contrôle d’intégrité
data-source.health.name Identificateur utilisé dans le rapport d’intégrité
data-source.health.threshold-ms Durée maximale en millisecondes pour la requête de contrôle d’intégrité
data-source.user-delegated-auth Objet configurant l’authentification déléguée par l’utilisateur (mssql uniquement) surBehalf-Of (OBO)
data-source.user-delegated-auth.enabled Active l’authentification OBO
data-source.user-delegated-auth.provider Fournisseur d’identité OBO (actuellement EntraId uniquement)
data-source.user-delegated-auth.database-audience Public cible pour le jeton SQL en aval

Vue d’ensemble du format

{
  "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>"]
}

Source de données

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

Propriétés imbriquées

Parent Property Type Required Default
data-source database-type enum ✔️ Oui None
data-source connection-string string ✔️ Oui None
data-source options object ❌ Non None

Valeurs de propriété

database-type Description Version minimale
mssql SQL dans Fabric -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Fabric Warehouse -
dwsql Point de terminaison Fabric SQL Analytics -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB pour NoSQL -
cosmosdb_postgresql Azure Cosmos DB pour PostgreSQL -

Format

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

Exemple : 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

Nous utilisons SqlClient pour Azure SQL et SQL Server, qui prend en charge ces variantes de chaînes de connexion.

Consommer SESSION_CONTEXT

Pour Azure SQL et SQL Server, le générateur d’API de données peut inclure des informations sur les revendications dans les fichiers SESSION_CONTEXTSQL.

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;

Exemple : 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

Les « options » spécifiées (database, containeret schema) sont spécifiques à Azure Cosmos DB.

Variables d'environnement

Utilisez des variables d’environnement pour empêcher les secrets de texte brut de votre fichier de configuration.

Tip

Le générateur d’API de données prend en charge la fonction et .envles @env() fichiers.

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

Résilience des connexions

Le générateur d’API de données utilise l’interruption exponentielle pour réessayer les demandes de base de données après des erreurs temporaires.

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

Identités de service managées (MSI)

Les identités de service managé (MSI) sont prises en charge avec DefaultAzureCredential définies dans la Azure.Identity bibliothèque. En savoir plus sur les identités managées dans Microsoft Entra pour Azure SQL.

identités managées User-Assigned (UAMI)

Pour l’identité managée affectée par l’utilisateur, ajoutez les propriétés d’authentification et d’ID utilisateur à votre chaîne de connexion tout en remplaçant l’ID client de votre identité managée affectée par l’utilisateur : Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

System-Assigned Managed Identity (SAMI)

Pour l’identité managée affectée par le système, ajoutez la propriété d’authentification et excluez les arguments UserId et Password de votre chaîne de connexion : Authentication=Active Directory Managed Identity;.

Intégrité (source de données)

Parent Property Type Required Default
data-source health object No

Le générateur d’API de données prend en charge plusieurs fichiers de configuration, chacun avec sa propre source de données. Ce bloc de configuration permet à chaque source de données d’avoir sa propre configuration d’intégrité.

Propriétés imbriquées

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

Vérifier le nom

Étant donné que plusieurs fichiers de configuration peuvent pointer vers des sources de données du même type, ces sources de données ne peuvent pas être distinguées dans le rapport d’intégrité. Permet name d’attribuer une étiquette unique et identifiable utilisée uniquement dans le rapport d’intégrité.

Vérifier le comportement

La requête la plus simple, propre au type de base de données, est exécutée sur la source de données donnée pour vérifier que la connexion peut être ouverte. Utilisez la threshold-ms propriété pour configurer la durée maximale acceptable (en millisecondes) pour que cette requête se termine.

Format

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

Authentification déléguée par l’utilisateur

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

Authentification déléguée par l’utilisateur surBehalf-Of (OBO) pour SQL Server et Azure SQL. Lorsqu’il est activé, DAB échange le jeton utilisateur entrant pour un jeton SQL en aval afin que la base de données s’authentifie en tant qu’utilisateur appelant réel. Cette fonctionnalité est prise en charge uniquement pour mssql les sources de données et nécessite l’authentification entra ID en amont.

Note

La fonctionnalité 2.0 du Générateur d’API de données décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.

Propriétés imbriquées

Parent Property Type Required Default
data-source.user-delegated-auth enabled boolean No faux
data-source.user-delegated-auth provider enum (EntraId) No EntraId
data-source.user-delegated-auth database-audience string Oui (en cas d’activation) None
  • enabled— active ou désactive OBO.
  • provider: fournisseur d’identité pour l’échange de jetons. Actuellement, seul EntraId est pris en charge.
  • database-audience— audience cible pour le jeton SQL en aval (par exemple, https://database.windows.net).

Variables d’environnement requises

Lorsque OBO est activé, DAB lit les variables d’environnement suivantes pour l’échange de jetons :

Variable Description
DAB_OBO_CLIENTID ID d’application (client) de l’inscription de l’application Entra ID
DAB_OBO_CLIENTSECRET Clé secrète client pour l’inscription de l’application
DAB_OBO_TENANTID ID de locataire Entra ID

Regroupement de connexions par utilisateur

Lorsque OBO est activé, DAB gère des pools de connexions SQL distincts par utilisateur afin que le jeton d’accès d’un utilisateur ne soit jamais réutilisé pour la demande d’un autre utilisateur.

Note

Le regroupement de connexions par utilisateur s’applique uniquement lorsque l’authentification OBO est active. Les déploiements standard ne sont pas affectés.

Format

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

Exemple

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

Important

OBO est pris en charge uniquement pour mssql. La database-audience propriété est requise lorsque OBO est activé. L’exécution de cette configuration sur une source de données non MSSQL échoue.