Delen via


Naslaginformatie over databasespecifieke functies voor Data API Builder

In deze verwijzing worden functies, gedragingen en vereisten beschreven die specifiek zijn voor een of meer databaseplatforms die worden ondersteund door Data API Builder (DAB). Zie Beschikbaarheid van functies voor een vergelijkingsmatrix voor meerdere databases.

Ondersteuning voor databaseversies

DAB ondersteunt de volgende databaseplatforms. Minimale versievereisten zijn van toepassing op zelfbeheerde implementaties. PaaS-databases (Platform-as-a-Service) hebben geen minimale versievereiste omdat de service de versie beheert.

Databaseplatform Afkorting Minimumversie Aantekeningen
SQL Server SQL-serie 2016
Azure SQL SQL-serie N/B (PaaS)
Microsoft Fabric SQL SQL-serie N/B (PaaS)
Azure Cosmos DB voor NoSQL Cosmos DB N/B (PaaS) Alleen GraphQL; geen REST-eindpunten
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (toegewezen SQL-pool) SQLDW N/B (PaaS) Serverloze SQL-pool wordt niet ondersteund

Belangrijk

Controleer of zowel uw lokale ontwikkelingsdatabase als elke geïmplementeerde database voldoet aan de minimale versievereiste. DAB maakt verbinding met hetzelfde stuurprogramma in beide omgevingen. Een oudere versie op beide locaties veroorzaakt runtimefouten.

SQL Server en Azure SQL

SESSION_CONTEXT

Voor SQL Server en Azure SQL kan DAB geverifieerde gebruikersclaims doorgeven aan de database door aan te roepen sp_set_session_context voordat elke query wordt uitgevoerd. Met dit mechanisme kunnen beveiligingsbeleid op sql-niveau en opgeslagen procedures de identiteit van de beller lezen vanuit de database-engine.

Wanneer set-session-context dab is ingeschakeld in de DAB-configuratie, verzendt DAB alle geverifieerde claims als sleutel-waardeparen:

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;

Veelvoorkomende claims die worden verzonden, omvattenroles, suboiden eventuele aangepaste claims die uw id-provider in de JWT bevat.

SESSION_CONTEXT inschakelen

Instellen --set-session-context true wanneer u belt dab init:

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

Of stel de eigenschap rechtstreeks in:dab-config.json

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

Waarschuwing

set-session-context Als u de functie inschakelt, wordt het opslaan van antwoorden voor die gegevensbron uitgeschakeld. Omdat elke aanvraag afzonderlijke sessiewaarden instelt, mogen reacties van de ene gebruikerssessie in de cache niet aan een andere worden geleverd.

SESSION_CONTEXT gebruiken in SQL

Na het inschakelen set-session-contextkunnen uw SQL-objecten de claimwaarden lezen:

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

Zie Beveiliging op rijniveau implementeren met sessiecontext voor een volledig overzicht.

SESSION_CONTEXT en groepsgewijze verbindingen

DAB stelt alle sessiecontextwaarden aan het begin van elke aanvraag opnieuw in. Omdat set-session-context de semantiek van verbindingen per gebruiker echter wordt afgetrokken, wordt hergebruik van verbindingen tussen gebruikers automatisch vermeden wanneer deze optie is ingeschakeld.

Verbindingsreeksvarianten

DAB gebruikt Microsoft.Data.SqlClient voor SQL Server en Azure SQL. De bibliotheek ondersteunt deze indelingen voor verbindingsreeksen.

Algemene indelingen:

Verificatiemethode Verbindingsreekspatroon
SQL-aanmelding Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Beheerde identiteit Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
User-Assigned Beheerde Identiteit Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
StandaardReferenties voor Azure Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Aanbeveling

Sla verbindingsreeksen op in omgevingsvariabelen en verwijs ernaar met @env('SQL_CONNECTION_STRING'). Voor productie-implementaties slaat u de verbindingsreeks op in Azure Key Vault en verwijst u ernaar.@akv()

Niet-ondersteunde gegevenstypen

De volgende SQL Server- en Azure SQL-gegevenstypen worden niet ondersteund door DAB:

Gegevenstype Reden
geography Georuimtelijk type; serialisatie wordt niet ondersteund
geometry Planar ruimtelijk type; serialisatie wordt niet ondersteund
hierarchyid Hiërarchisch gegevenstype; serialisatie wordt niet ondersteund
json Systeemeigen JSON-type (momenteel in preview)
rowversion Type rijversiering; niet opgenomen in API-antwoorden
sql_variant Kolommen van het type variabele; typedeductie wordt niet ondersteund
vector Vectortype (momenteel in preview)
xml XML-type; serialisatie wordt niet ondersteund

Azure Cosmos DB voor NoSQL

Schemavereiste

In tegenstelling tot relationele databases is Azure Cosmos DB for NoSQL schemaneutraal. DAB kan geen Cosmos DB-container introseren om GraphQL-typen te genereren. U moet een GraphQL-schemabestand (.gql) opgeven waarmee uw documentstructuur wordt gedefinieerd.

Het schemabestand maakt gebruik van standaard GraphQL Schema Definition Language (SDL) met twee aangepaste instructies:

Richtlijn Verplicht Description
@model Ja Wijst een GraphQL-type toe aan een DAB-entiteitsnaam
@authorize No Beperkt veld- of typetoegang tot specifieke rollen

@model richtlijn

De @model(name: "...") instructie is vereist voor elk GraphQL-type dat u beschikbaar maakt via DAB. De name waarde moet exact overeenkomen met de naam van de entiteit in uw DAB-configuratiebestand.

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

@authorize richtlijn

De @authorize instructie biedt toegangsbeheer op veld- en typeniveau voor Cosmos DB GraphQL-query's. Het accepteert een roles parameter met de rollen die toegang hebben tot het veld of type.

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

U kunt ook op typeniveau toepassen @authorize :

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

Belangrijk

De @authorize instructie voegt toe aan machtigingen op entiteitsniveau. Zowel de instructie als het machtigingsblok van de entiteit moet toestaan dat de aanvraag voor toegang slaagt. Als een veld maar de entiteit geen machtigingsvermelding editorheeft@authorize(roles: ["editor"]), wordt de aanvraag geweigerd.

Opmerking

@authorize(policy: "...") wordt niet ondersteund. Alleen gebruiken @authorize(roles: [...]) .

Zie Data API Builder instellen voor Azure Cosmos DB for NoSQL voor een volledige installatiehandleiding.

REST API is niet beschikbaar

DAB genereert geen REST-eindpunten voor Azure Cosmos DB voor NoSQL. Azure Cosmos DB biedt een uitgebreide systeemeigen REST API voor documentbewerkingen. Alleen GraphQL-eindpunten worden gegenereerd. OpenAPI-documenten worden niet gegenereerd voor Cosmos DB-entiteiten.

Als u toegang wilt krijgen tot gegevens via REST, gebruikt u de Azure Cosmos DB REST API rechtstreeks.

Niet-ondersteunde functies voor Cosmos DB

De volgende functies worden niet ondersteund voor Azure Cosmos DB for NoSQL:

Feature Aantekeningen
REST-eindpunten Gebruik in plaats daarvan de systeemeigen Cosmos DB REST API
Databasebeleid Beleidspredicaten vereisen semantiek voor relationele query's
opgeslagen procedures Niet ondersteund als DAB-entiteiten
Relaties Relaties tussen containers worden niet ondersteund
Sorteren ($orderby) Niet ondersteund in GraphQL-query's
Aggregation Niet ondersteund
Meerdere mutaties Niet ondersteund
Sessiecontext SQL-specifieke functie

PostgreSQL

Minimumversie

PostgreSQL 11 of hoger is vereist. DAB gebruikt Npgsql als postgreSQL-stuurprogramma.

Niet-ondersteunde gegevenstypen

De volgende PostgreSQL-gegevenstypen worden niet ondersteund door DAB:

Gegevenstype Aantekeningen
bytea Binaire tekenreeks; serialisatie wordt niet ondersteund
date Gebruik timestamp of timestamptz
smalldatetime Geen systeemeigen PostgreSQL-type
datetime2 Niet systeemeigen; doorgaans verwerkt door timestamp
timestamptz Tijdstempel met tijdzone; niet ondersteund
time Tijdstip zonder datum
localtime Systeemkloktijd

opgeslagen procedures

Opgeslagen procedures worden niet ondersteund voor PostgreSQL-entiteiten. Gebruik in plaats daarvan tabellen en weergaven.

MySQL

Minimumversie

MySQL 8 of hoger is vereist.

Niet-ondersteunde gegevenstypen

De volgende MySQL-gegevenstypen worden niet ondersteund door DAB:

Gegevenstype Aantekeningen
UUID Universally Unique Identifiers
DATE Kalenderdatums
SMALLDATETIME Minder nauwkeurige datum- en tijdopslag
DATETIME2 Niet systeemeigen; Gebruiken datetime
DATETIMEOFFSET Datums en tijden met tijdzone
TIME Tijdstip zonder datum
LOCALTIME Huidige tijd op basis van de systeemklok

opgeslagen procedures

Opgeslagen procedures worden niet ondersteund voor MySQL-entiteiten. Gebruik in plaats daarvan tabellen.

Azure Synapse Analytics (toegewezen SQL-pool)

Ondersteunde objecten

Toegewezen SQL-pool ondersteunt tabellen, weergaven en opgeslagen procedures, hetzelfde als SQL Server en Azure SQL. Serverloze SQL-pool wordt niet ondersteund.

Niet-ondersteunde functies

Feature Aantekeningen
Meerdere mutaties Niet ondersteund