Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 |