Dela via


Databasspecifik funktionsreferens för Data API-byggare

Den här referensen beskriver funktioner, beteenden och krav som är specifika för en eller flera databasplattformar som stöds av Data API Builder (DAB). En jämförelsematris för funktioner mellan databaser finns i Funktionstillgänglighet.

Stöd för databasversion

DAB stöder följande databasplattformar. Lägsta versionskrav gäller för självhanterade distributioner. PaaS-databaser (Platform-as-a-Service) har inte något krav på lägsta version eftersom tjänsten hanterar versionen.

Databasplattform Förkortning Lägsta version Notes
SQL Server SQL-familj 2016
Azure SQL SQL-familj N/A (PaaS)
Microsoft Fabric SQL SQL-familj N/A (PaaS)
Azure Cosmos DB för NoSQL Cosmos DB N/A (PaaS) Endast GraphQL; inga REST-slutpunkter
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (dedikerad SQL-pool) SQLDW N/A (PaaS) Serverlös SQL-pool stöds inte

Viktigt!

Kontrollera att både din lokala utvecklingsdatabas och alla distribuerade databaser uppfyller minimikraven för version. DAB ansluter med samma drivrutin i båda miljöerna. En äldre version på någon av platserna orsakar körningsfel.

SQL Server och Azure SQL

SESSION_CONTEXT

För SQL Server och Azure SQL kan DAB sprida autentiserade användaranspråk till databasen genom att anropa sp_set_session_context innan varje fråga körs. Med den här mekanismen kan SQL-interna säkerhetsprinciper på radnivå och lagrade procedurer läsa anroparens identitet inifrån databasmotorn.

När set-session-context är aktiverat i DAB-konfigurationen skickar DAB alla autentiserade anspråk som nyckel/värde-par:

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;

Vanliga anspråk som skickas är roles, sub, oidoch alla anpassade anspråk som din identitetsprovider inkluderar i JWT.

Aktivera SESSION_CONTEXT

Ange --set-session-context true när du anropar dab init:

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

Eller ange egenskapen direkt i dab-config.json:

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

Varning

Om du aktiverar set-session-context inaktiveras svarscachelagring för den datakällan. Eftersom varje begäran anger distinkta sessionsvärden får cachelagrade svar från en användares session inte hanteras till en annan.

Använda SESSION_CONTEXT i SQL

När du har aktiverat set-session-contextkan dina SQL-objekt läsa anspråksvärdena:

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

En fullständig genomgång finns i Implementera säkerhet på radnivå med sessionskontext.

SESSION_CONTEXT och anslutningspooler

DAB återställer alla sessionskontextvärden i början av varje begäran. Men eftersom set-session-context tvingar per användare anslutningssemantik, undviks återanvändning av anslutningar mellan användare automatiskt när det här alternativet är aktiverat.

Varianter av anslutningssträngar

DAB använder Microsoft.Data.SqlClient för SQL Server och Azure SQL. Biblioteket stöder dessa anslutningssträngsformat.

Vanliga format:

Autentiseringsmetod Mönster för anslutningssträng
SQL-inloggning Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Hanterad identitet Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Användartilldelad hanterad identitet Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Standardautentiseringsuppgifter för Azure Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Tips/Råd

Lagra anslutningssträngar i miljövariabler och referera till dem med @env('SQL_CONNECTION_STRING'). För produktionsdistributioner lagrar du anslutningssträngen i Azure Key Vault och refererar till den med @akv().

Datatyper som inte stöds

Följande SQL Server- och Azure SQL-datatyper stöds inte av DAB:

Datatyp Förnuft
geography Geospatial typ; serialisering stöds inte
geometry Planar rumslig typ; serialisering stöds inte
hierarchyid Hierarkisk datatyp; serialisering stöds inte
json Inbyggd JSON-typ (för närvarande i förhandsversion)
rowversion Radversionstyp; ingår inte i API-svar
sql_variant Kolumner av variabeltyp; typinferens stöds inte
vector Vektortyp (för närvarande i förhandsversion)
xml XML-typ; serialisering stöds inte

Azure Cosmos DB för NoSQL

Schemakrav

Till skillnad från relationsdatabaser är Azure Cosmos DB for NoSQL schemaagnostisk. DAB kan inte introspekta en Cosmos DB-container för att generera GraphQL-typer. Du måste ange en GraphQL-schemafil (.gql) som definierar dokumentstrukturen.

Schemafilen använder Standard GraphQL Schema Definition Language (SDL) med två anpassade direktiv:

Directive Obligatoriskt Description
@model Ja Mappar en GraphQL-typ till ett DAB-entitetsnamn
@authorize No Begränsar fält- eller typåtkomst till specifika roller

@model direktiv

Direktivet @model(name: "...") krävs för varje GraphQL-typ som du exponerar via DAB. Värdet name måste exakt matcha entitetsnamnet i DIN DAB-konfigurationsfil.

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

@authorize direktiv

Direktivet @authorize tillhandahåller åtkomstkontroll på fältnivå och typnivå för Cosmos DB GraphQL-frågor. Den accepterar en roles parameter som visar de roller som kan komma åt fältet eller typen.

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

Du kan också använda @authorize på typnivå:

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

Viktigt!

Direktivet @authorizelägger till behörigheter på entitetsnivå. Både direktivet och entitetens behörighetsblock måste tillåta att begäran om åtkomst lyckas. Om ett fält har @authorize(roles: ["editor"]) men entiteten inte har någon behörighetspost för editornekas begäran.

Anmärkning

@authorize(policy: "...") stöds inte. Använd @authorize(roles: [...]) endast.

En fullständig installationsguide finns i Konfigurera Data API Builder för Azure Cosmos DB för NoSQL.

REST API-otillgänglighet

DAB genererar inte REST-slutpunkter för Azure Cosmos DB för NoSQL. Azure Cosmos DB tillhandahåller ett omfattande internt REST API för dokumentåtgärder. Endast GraphQL-slutpunkter genereras. OpenAPI-dokument genereras inte för Cosmos DB-entiteter.

Om du vill komma åt data via REST använder du Rest-API:et för Azure Cosmos DB direkt.

Funktioner som inte stöds för Cosmos DB

Följande funktioner stöds inte för Azure Cosmos DB för NoSQL:

Feature Notes
REST-slutpunkter Använd det interna Cosmos DB REST-API:et i stället
Databasprinciper Princippredikat kräver relationsfrågassemantik
Lagrade procedurer Stöds inte som DAB-entiteter
Relationer Relationer mellan containrar stöds inte
Sortering ($orderby) Stöds inte i GraphQL-frågor
Aggregation Stöds ej
Flera mutationer Stöds ej
Sessionskontext SQL-specifik funktion

PostgreSQL

Lägsta version

PostgreSQL 11 eller senare krävs. DAB använder Npgsql som postgreSQL-drivrutin.

Datatyper som inte stöds

Följande PostgreSQL-datatyper stöds inte av DAB:

Datatyp Notes
bytea Binär sträng; serialisering stöds inte
date Använd timestamp eller timestamptz
smalldatetime Inte en intern PostgreSQL-typ
datetime2 Inte inbyggt; hanteras vanligtvis av timestamp
timestamptz Tidsstämpel med tidszon; stöds inte
time Tid på dagen utan datum
localtime Systemklockabaserad tid

Lagrade procedurer

Lagrade procedurer stöds inte för PostgreSQL-entiteter. Använd tabeller och vyer i stället.

MySQL

Lägsta version

MySQL 8 eller senare krävs.

Datatyper som inte stöds

Följande MySQL-datatyper stöds inte av DAB:

Datatyp Notes
UUID Universellt unika identifierare
DATE Kalenderdatum
SMALLDATETIME Mindre exakt datum- och tidslagring
DATETIME2 Inte inbyggt; Använda datetime
DATETIMEOFFSET Datum och tider med tidszon
TIME Tid på dagen utan datum
LOCALTIME Aktuell tid baserat på systemklockan

Lagrade procedurer

Lagrade procedurer stöds inte för MySQL-entiteter. Använd tabeller i stället.

Azure Synapse Analytics (dedikerad SQL-pool)

Objekt som stöds

Dedikerad SQL-pool stöder tabeller, vyer och lagrade procedurer – samma som SQL Server och Azure SQL. Serverlös SQL-pool stöds inte.

Funktioner som inte stöds

Feature Notes
Flera mutationer Stöds ej