Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |