Partager via


Informations de référence sur les fonctionnalités spécifiques à la base de données pour le générateur d’API de données

Cette référence couvre les fonctionnalités, les comportements et les exigences spécifiques à une ou plusieurs plateformes de base de données prises en charge par le générateur d’API de données (DAB). Pour obtenir une matrice de comparaison des fonctionnalités entre bases de données, consultez la disponibilité des fonctionnalités.

Prise en charge des versions de base de données

DAB prend en charge les plateformes de base de données suivantes. Les exigences de version minimales s’appliquent aux déploiements autogérés. Les bases de données PaaS (Platform-as-a-service) n’ont pas de configuration minimale requise pour la version, car le service gère la version.

Plateforme de base de données Abréviation Version minimale Remarques
SQL Server Famille SQL 2016
Azure SQL Famille SQL N/A (PaaS)
Microsoft Fabric SQL Famille SQL N/A (PaaS)
Azure Cosmos DB pour NoSQL Cosmos DB N/A (PaaS) GraphQL uniquement ; aucun point de terminaison REST
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (pool SQL dédié) SQLDW N/A (PaaS) Le pool SQL serverless n’est pas pris en charge

Important

Vérifiez que votre base de données de développement locale et toute base de données déployée répondent à la configuration minimale requise pour la version. DAB se connecte à l’aide du même pilote dans les deux environnements. Une version antérieure dans les deux emplacements provoque des erreurs d’exécution.

SQL Server et Azure SQL

SESSION_CONTEXT

Pour SQL Server et Azure SQL, DAB peut propager les revendications utilisateur authentifiées à la base de données en appelant sp_set_session_context avant d’exécuter chaque requête. Ce mécanisme permet aux stratégies de sécurité au niveau des lignes sql natives et aux procédures stockées de lire l’identité de l’appelant à partir du moteur de base de données.

Lorsqu’il set-session-context est activé dans la configuration DAB, DAB envoie toutes les revendications authentifiées en tant que paires clé-valeur :

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;

Les revendications courantes envoyées incluentroles, suboidet toutes les revendications personnalisées que votre fournisseur d’identité inclut dans le JWT.

Activer SESSION_CONTEXT

Définir --set-session-context true lors de l’appel dab init:

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

Ou définissez la propriété directement dans dab-config.json:

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

Avertissement

L’activation set-session-context désactive la mise en cache des réponses pour cette source de données. Étant donné que chaque requête définit des valeurs de session distinctes, les réponses mises en cache de la session d’un utilisateur ne doivent pas être servies à une autre.

Utiliser SESSION_CONTEXT dans SQL

Après l’activation set-session-context, vos objets SQL peuvent lire les valeurs de revendication :

-- 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));

Pour obtenir une procédure pas à pas complète, consultez Implémenter la sécurité au niveau des lignes avec le contexte de session.

SESSION_CONTEXT et regroupement de connexions

DAB réinitialise toutes les valeurs de contexte de session au début de chaque requête. Toutefois, étant donné que set-session-context force la sémantique de connexion par utilisateur, la réutilisation des connexions entre les utilisateurs est évitée automatiquement lorsque cette option est activée.

Variantes de chaîne de connexion

Utilisations Microsoft.Data.SqlClient DAB pour SQL Server et Azure SQL. La bibliothèque prend en charge ces formats de chaîne de connexion.

Formats courants :

Méthode d’authentification Modèle de chaîne de connexion
Connexion SQL Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Identité gérée Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Identité managée assignée par l'utilisateur Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Informations d’identification Azure par défaut Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Conseil / Astuce

Stockez les chaînes de connexion dans les variables d’environnement et référencez-les avec @env('SQL_CONNECTION_STRING'). Pour les déploiements de production, stockez la chaîne de connexion dans Azure Key Vault et référencez-la avec @akv().

Types de données non pris en charge

Les types de données SQL Server et Azure SQL suivants ne sont pas pris en charge par DAB :

Type de données Reason
geography Type géospatial ; sérialisation non prise en charge
geometry Type spatial planaire ; sérialisation non prise en charge
hierarchyid Type de données hiérarchique ; sérialisation non prise en charge
json Type JSON natif (actuellement en préversion)
rowversion Type de contrôle de version des lignes ; non inclus dans les réponses d’API
sql_variant Colonnes de type variable ; inférence de type non prise en charge
vector Type de vecteur (actuellement en préversion)
xml Type XML ; sérialisation non prise en charge

Azure Cosmos DB pour NoSQL

Configuration requise pour le schéma

Contrairement aux bases de données relationnelles, Azure Cosmos DB pour NoSQL est indépendant du schéma. DAB ne peut pas introspecter un conteneur Cosmos DB pour générer des types GraphQL. Vous devez fournir un fichier de schéma GraphQL (.gql) qui définit votre structure de document.

Le fichier de schéma utilise le langage SDL (GraphQL Schema Definition Language) standard avec deux directives personnalisées :

Instructions Obligatoire Description
@model Oui Mappe un type GraphQL à un nom d’entité DAB
@authorize Non Limite l’accès au champ ou au type à des rôles spécifiques

@model Directive

La @model(name: "...") directive est requise sur chaque type GraphQL que vous exposez via DAB. La name valeur doit correspondre exactement au nom de l’entité dans votre fichier de configuration DAB.

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

@authorize Directive

La @authorize directive fournit un contrôle d’accès au niveau du champ et au niveau du type pour les requêtes GraphQL Cosmos DB. Il accepte un roles paramètre répertoriant les rôles qui peuvent accéder au champ ou au type.

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

Vous pouvez également appliquer @authorize au niveau du type :

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

Important

La @authorize directive ajoute des autorisations au niveau de l’entité. La directive et le bloc d’autorisation de l’entité doivent autoriser la demande d’accès. Si un champ a @authorize(roles: ["editor"]) mais que l’entité n’a pas d’entrée d’autorisation, editorla demande est refusée.

Note

@authorize(policy: "...") n’est pas pris en charge. Utilisez @authorize(roles: [...]) uniquement.

Pour obtenir un guide complet de configuration, consultez Configurer le générateur d’API de données pour Azure Cosmos DB pour NoSQL.

Indisponibilité de l’API REST

DAB ne génère pas de points de terminaison REST pour Azure Cosmos DB pour NoSQL. Azure Cosmos DB fournit une API REST native complète pour les opérations de document. Seuls les points de terminaison GraphQL sont générés. Les documents OpenAPI ne sont pas générés pour les entités Cosmos DB.

Pour accéder aux données via REST, utilisez directement l’API REST Azure Cosmos DB .

Fonctionnalités non prises en charge pour Cosmos DB

Les fonctionnalités suivantes ne sont pas prises en charge pour Azure Cosmos DB pour NoSQL :

Fonctionnalité Remarques
Points de terminaison REST Utiliser l’API REST Cosmos DB native à la place
Stratégies de base de données Les prédicats de stratégie nécessitent une sémantique de requête relationnelle
Procédures stockées Non pris en charge en tant qu’entités DAB
Relations Les relations entre conteneurs ne sont pas prises en charge
Tri ($orderby) Non pris en charge dans les requêtes GraphQL
Aggregation Non pris en charge
Mutations multiples Non pris en charge
Contexte de session Fonctionnalité spécifique à SQL

PostgreSQL

Version minimale

PostgreSQL 11 ou version ultérieure est requis. DAB utilise Npgsql comme pilote PostgreSQL.

Types de données non pris en charge

Les types de données PostgreSQL suivants ne sont pas pris en charge par DAB :

Type de données Remarques
bytea Chaîne binaire ; sérialisation non prise en charge
date Utiliser timestamp ou timestamptz
smalldatetime Pas un type PostgreSQL natif
datetime2 Non natif ; généralement géré par timestamp
timestamptz Horodatage avec fuseau horaire ; non pris en charge
time Heure du jour sans date
localtime Heure basée sur l’horloge système

Procédures stockées

Les procédures stockées ne sont pas prises en charge pour les entités PostgreSQL. Utilisez plutôt des tables et des vues.

MySQL

Version minimale

MySQL 8 ou version ultérieure est obligatoire.

Types de données non pris en charge

Les types de données MySQL suivants ne sont pas pris en charge par DAB :

Type de données Remarques
UUID Identificateurs uniques universels
DATE Dates du calendrier
SMALLDATETIME Stockage de date et d’heure moins précis
DATETIME2 Non natif ; Utiliser datetime
DATETIMEOFFSET Dates et heures avec fuseau horaire
TIME Heure du jour sans date
LOCALTIME Heure actuelle basée sur l’horloge système

Procédures stockées

Les procédures stockées ne sont pas prises en charge pour les entités MySQL. Utilisez plutôt des tables.

Azure Synapse Analytics (pool SQL dédié)

Objets pris en charge

Le pool SQL dédié prend en charge les tables, les vues et les procédures stockées, identiques à SQL Server et Azure SQL. Le pool SQL serverless n’est pas pris en charge.

Fonctionnalités non prises en charge

Fonctionnalité Remarques
Mutations multiples Non pris en charge