Freigeben über


Referenz zu datenbankspezifischen Features für den Daten-API-Generator

Diese Referenz behandelt Features, Verhaltensweisen und Anforderungen, die spezifisch für eine oder mehrere Datenbankplattformen sind, die vom Daten-API-Generator (DATA API Builder, DAB) unterstützt werden. Eine datenbankübergreifende Featurevergleichsmatrix finden Sie unter Featureverfügbarkeit.

Datenbankversionsunterstützung

DAB unterstützt die folgenden Datenbankplattformen. Mindestversionsanforderungen gelten für selbstverwaltete Bereitstellungen. PaaS-Datenbanken (Platform-as-a-Service) verfügen nicht über eine Mindestversionsanforderung, da der Dienst die Version verwaltet.

Datenbankplattform Abkürzung Mindestversion Hinweise
SQL Server SQL-Familie 2016
Azure SQL SQL-Familie N/A (PaaS)
Microsoft Fabric SQL SQL-Familie N/A (PaaS)
Azure Cosmos DB für NoSQL-Datenbanklösungen Cosmos DB N/A (PaaS) Nur GraphQL; keine REST-Endpunkte
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (dedizierter SQL-Pool) SQLDW N/A (PaaS) Serverloser SQL-Pool wird nicht unterstützt

Von Bedeutung

Stellen Sie sicher, dass sowohl Die lokale Entwicklungsdatenbank als auch jede bereitgestellte Datenbank die Mindestversionsanforderung erfüllen. DAB stellt eine Verbindung mit demselben Treiber in beiden Umgebungen bereit. Eine ältere Version an beiden Speicherorten verursacht Laufzeitfehler.

SQL Server und Azure SQL

SESSION_CONTEXT

Für SQL Server und Azure SQL kann DAB authentifizierte Benutzeransprüche an die Datenbank weitergeben, indem sie vor dem Ausführen jeder Abfrage aufrufen sp_set_session_context . Mit diesem Mechanismus können SQL-systemeigene Sicherheitsrichtlinien auf Zeilenebene und gespeicherte Prozeduren die Identität des Aufrufers aus dem Datenbankmodul lesen.

Wenn set-session-context in der DAB-Konfiguration aktiviert ist, sendet DAB alle authentifizierten Ansprüche als Schlüsselwertpaare:

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;

Allgemeine gesendete Ansprüche umfassen roles, , sub, oidund alle benutzerdefinierten Ansprüche, die Ihr Identitätsanbieter in JWT enthält.

Aktivieren von SESSION_CONTEXT

Beim Aufrufen dab initfestlegen--set-session-context true:

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

Oder legen Sie die Eigenschaft direkt in dab-config.json:

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

Warnung

Durch aktivieren set-session-context wird das Zwischenspeichern von Antworten für diese Datenquelle deaktiviert. Da jede Anforderung unterschiedliche Sitzungswerte festlegt, dürfen zwischengespeicherte Antworten aus der Sitzung eines Benutzers nicht an eine andere bereitgestellt werden.

Verwenden von SESSION_CONTEXT in SQL

Nach dem Aktivieren set-session-contextkönnen Ihre SQL-Objekte die Anspruchswerte lesen:

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

Eine vollständige exemplarische Vorgehensweise finden Sie unter Implementieren der Sicherheit auf Zeilenebene mit Sitzungskontext.

SESSION_CONTEXT und Verbindungspooling

DAB setzt alle Sitzungskontextwerte am Anfang jeder Anforderung zurück. Da set-session-context jedoch die Semantik pro Benutzerverbindung erzwungen wird, wird die Wiederverwendung der Verbindung für benutzerübergreifende Benutzer automatisch vermieden, wenn diese Option aktiviert ist.

Verbindungszeichenfolgenvarianten

DAB verwendet Microsoft.Data.SqlClient SQL Server und Azure SQL. Die Bibliothek unterstützt diese Verbindungszeichenfolgenformate.

Allgemeine Formate:

Authentifizierungsmethode Verbindungszeichenfolgenmuster
SQL-Anmeldekonto Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Verwaltete Identität Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
User-Assigned verwaltete Identität Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Standardmäßige Azure-Anmeldeinformationen Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Tipp

Speichern Sie Verbindungszeichenfolgen in Umgebungsvariablen, und verweisen Sie darauf mit @env('SQL_CONNECTION_STRING'). Speichern Sie für Produktionsbereitstellungen die Verbindungszeichenfolge in Azure Key Vault, und verweisen Sie darauf mit @akv().

Nicht unterstützte Datentypen

Die folgenden SQL Server- und Azure SQL-Datentypen werden von DAB nicht unterstützt:

Datentyp Grund
geography Geospatialtyp; Serialisierung wird nicht unterstützt
geometry Planarer räumlicher Typ; Serialisierung wird nicht unterstützt
hierarchyid Hierarchischer Datentyp; Serialisierung wird nicht unterstützt
json Nativer JSON-Typ (derzeit in der Vorschau)
rowversion Zeilenversionstyp; nicht in API-Antworten enthalten
sql_variant Spalten vom Variablentyp; Typinference nicht unterstützt
vector Vektortyp (derzeit in der Vorschau)
xml XML-Typ; Serialisierung wird nicht unterstützt

Azure Cosmos DB für NoSQL-Datenbanklösungen

Schemaanforderung

Im Gegensatz zu relationalen Datenbanken ist Azure Cosmos DB für NoSQL schemaagnostisch. DAB kann keinen Cosmos DB-Container introspektieren, um GraphQL-Typen zu generieren. Sie müssen eine GraphQL-Schemadatei (.gql) bereitstellen, die Ihre Dokumentstruktur definiert.

Die Schemadatei verwendet standardmäßige GraphQL Schema Definition Language (SDL) mit zwei benutzerdefinierten Direktiven:

Richtlinie Erforderlich Description
@model Ja Ordnet einen GraphQL-Typ einem DAB-Entitätsnamen zu.
@authorize No Beschränkt den Feld- oder Typzugriff auf bestimmte Rollen.

@model-Anweisung

Die @model(name: "...") Direktive ist für jeden GraphQL-Typ erforderlich, den Sie über DAB verfügbar machen. Der name Wert muss exakt mit dem Entitätsnamen in Ihrer DAB-Konfigurationsdatei übereinstimmen.

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

@authorize-Anweisung

Die @authorize Direktive stellt die Zugriffssteuerung auf Feldebene und Typebene für Cosmos DB GraphQL-Abfragen bereit. Er akzeptiert einen roles Parameter, der die Rollen auflistet, die auf das Feld oder den Typ zugreifen können.

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

Sie können auch auf Typebene anwenden @authorize :

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

Von Bedeutung

Die @authorize Direktive fügt Berechtigungen auf Entitätsebene hinzu. Sowohl die Direktive als auch der Berechtigungsblock der Entität müssen die Anforderung für den Erfolgreichen Zugriff zulassen. Wenn ein Feld @authorize(roles: ["editor"]) , aber die Entität keinen Berechtigungseintrag hat editor, wird die Anforderung verweigert.

Hinweis

@authorize(policy: "...") wird nicht unterstützt. Nur verwenden @authorize(roles: [...]) .

Eine vollständige Einrichtungsanleitung finden Sie unter Einrichten des Daten-API-Generators für Azure Cosmos DB für NoSQL.

Rest-API nicht verfügbar

DAB generiert keine REST-Endpunkte für Azure Cosmos DB für NoSQL. Azure Cosmos DB bietet eine umfassende native REST-API für Dokumentvorgänge. Es werden nur GraphQL-Endpunkte generiert. OpenAPI-Dokumente werden für Cosmos DB-Entitäten nicht generiert.

Verwenden Sie die Azure Cosmos DB-REST-API direkt, um auf Daten über REST zuzugreifen.

Nicht unterstützte Features für Cosmos DB

Die folgenden Features werden für Azure Cosmos DB für NoSQL nicht unterstützt:

Funktion Hinweise
REST-Endpunkte Verwenden Sie stattdessen die native Cosmos DB REST-API.
Datenbankrichtlinien Richtlinien-Prädikate erfordern relationale Abfragesemantik
Gespeicherte Prozeduren Nicht unterstützt als DAB-Entitäten
Beziehungen Containerübergreifende Beziehungen werden nicht unterstützt.
Sortieren ($orderby) In GraphQL-Abfragen nicht unterstützt
Aggregation Nicht unterstützt
Mehrere Mutationen Nicht unterstützt
Sitzungskontext SQL-spezifisches Feature

PostgreSQL

Mindestversion

PostgreSQL 11 oder höher ist erforderlich. DAB verwendet Npgsql als PostgreSQL-Treiber.

Nicht unterstützte Datentypen

Die folgenden PostgreSQL-Datentypen werden von DAB nicht unterstützt:

Datentyp Hinweise
bytea Binäre Zeichenfolge; Serialisierung wird nicht unterstützt
date Verwenden Sie timestamp oder timestamptz
smalldatetime Kein nativer PostgreSQL-Typ
datetime2 Nicht nativ; in der Regel von timestamp
timestamptz Zeitstempel mit Zeitzone; nicht unterstützt
time Tageszeit ohne Datum
localtime Systemuhrbasierte Zeit

Gespeicherte Prozeduren

Gespeicherte Prozeduren werden für PostgreSQL-Entitäten nicht unterstützt. Verwenden Sie stattdessen Tabellen und Ansichten.

MySQL

Mindestversion

MySQL 8 oder höher ist erforderlich.

Nicht unterstützte Datentypen

Die folgenden MySQL-Datentypen werden von DAB nicht unterstützt:

Datentyp Hinweise
UUID Universally Unique Identifiers
DATE Kalenderdaten
SMALLDATETIME Weniger präziser Datums- und Uhrzeitspeicher
DATETIME2 Nicht nativ; Verwenden datetime
DATETIMEOFFSET Datums- und Uhrzeitangaben mit Zeitzone
TIME Tageszeit ohne Datum
LOCALTIME Aktuelle Zeit basierend auf der Systemuhr

Gespeicherte Prozeduren

Gespeicherte Prozeduren werden für MySQL-Entitäten nicht unterstützt. Verwenden Sie stattdessen Tabellen.

Azure Synapse Analytics (dedizierter SQL-Pool)

Unterstützte Objekte

Dedizierter SQL-Pool unterstützt Tabellen, Ansichten und gespeicherte Prozeduren – identisch mit SQL Server und Azure SQL. Serverloser SQL-Pool wird nicht unterstützt.

Nicht unterstützte Funktionen

Funktion Hinweise
Mehrere Mutationen Nicht unterstützt