Adatbázisspecifikus funkciókra vonatkozó referencia a Data API Builderhez

Ez a referencia a Data API Builder (DAB) által támogatott egy vagy több adatbázisplatformra jellemző funkciókat, viselkedéseket és követelményeket ismerteti. Adatbázisközi szolgáltatás-összehasonlító mátrixért tekintse meg a szolgáltatás rendelkezésre állását ismertető témakört.

Adatbázis verziótámogatása

A DAB az alábbi adatbázisplatformokat támogatja. A minimális verziókövetelmények a saját üzemeltetésű üzemelő példányokra vonatkoznak. A szolgáltatásként nyújtott platform (PaaS) adatbázisoknak nincs minimális verziókövetelményük, mert a szolgáltatás kezeli a verziót.

Adatbázisplatform Rövidítés Minimális verzió Jegyzetek
SQL Server SQL-család 2016
Azure SQL SQL-család N/A (PaaS)
Microsoft Fabric SQL SQL-család N/A (PaaS)
Azure Cosmos DB for NoSQL Cosmos DB N/A (PaaS) Csak GraphQL; nincsenek REST-végpontok
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (dedikált SQL-készlet) SQLDW N/A (PaaS) A kiszolgáló nélküli SQL-készlet nem támogatott

Fontos

Ellenőrizze, hogy a helyi fejlesztési adatbázis és az üzembe helyezett adatbázisok megfelelnek-e a minimális verziókövetelménynek. A DAB ugyanazzal az illesztőprogramtal csatlakozik mindkét környezetben. Egy régebbi verzió mindkét helyen futásidejű hibákat okoz.

SQL Server és Azure SQL

SESSION_CONTEXT

Az SQL Server és az Azure SQL esetében a DAB az egyes lekérdezések végrehajtása előtt hívással sp_set_session_context propagálja a hitelesített felhasználói jogcímeket az adatbázisba. Ez a mechanizmus lehetővé teszi, hogy az SQL-natív sorszintű biztonsági szabályzatok és a tárolt eljárások beolvassák a hívó identitását az adatbázismotorból.

Ha set-session-context engedélyezve van a DAB-konfigurációban, a DAB az összes hitelesített jogcímet kulcs-érték párokként küldi el:

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;

Az elküldött gyakori jogcímek közé tartoznak rolesa JWT-ben suboidszereplő egyéni jogcímek, valamint az identitásszolgáltató által tartalmazott egyéni jogcímek.

SESSION_CONTEXT engedélyezése

Beállítás --set-session-context true híváskor dab init:

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

Vagy állítsa be a tulajdonságot közvetlenül a következőben dab-config.json:

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

Figyelmeztetés

Az set-session-context engedélyezés letiltja az adatforrás válasz gyorsítótárazását. Mivel minden kérés különböző munkamenet-értékeket állít be, az egyik felhasználó munkamenetéből származó gyorsítótárazott válaszokat nem lehet egy másiknak kézbesíteni.

SESSION_CONTEXT használata az SQL-ben

Az engedélyezés set-session-contextután az SQL-objektumok beolvashatják a jogcímértékeket:

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

A teljes útmutatót a sorszintű biztonság megvalósítása munkamenet-környezettel című témakörben találja.

SESSION_CONTEXT és kapcsolatkészletezés

A DAB minden kérés elején alaphelyzetbe állítja az összes munkamenet-környezeti értéket. set-session-context Mivel azonban a felhasználónkénti kapcsolat szemantikáját kényszeríti ki, a felhasználók közötti kapcsolat újrafelhasználása automatikusan elkerülhető, ha ez a beállítás engedélyezve van.

Kapcsolati sztringvariánsok

A DAB az SQL Serverhez és az Azure SQL-hez használható Microsoft.Data.SqlClient . A kódtár támogatja ezeket a kapcsolati sztringformátumokat.

Gyakori formátumok:

Hitelesítési módszer Kapcsolati sztringminta
SQL-bejelentkezés Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Felügyelt identitás Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Felhasználó által hozzárendelt felügyelt identitás Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Alapértelmezett Azure-hitelesítő adatok Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Jótanács

Tárolja a kapcsolati sztringeket a környezeti változókban, és hivatkozzon rájuk a következővel @env('SQL_CONNECTION_STRING'): . Éles környezetekben tárolja a kapcsolati sztringet az Azure Key Vaultban, és hivatkozzon rá @akv().

Nem támogatott adattípusok

A DAB nem támogatja az alábbi SQL Server- és Azure SQL-adattípusokat:

Adattípus Jogcím
geography Térinformatikai típus; a szerializálás nem támogatott
geometry Planáris térbeli típus; a szerializálás nem támogatott
hierarchyid Hierarchikus adattípus; a szerializálás nem támogatott
json Natív JSON-típus (jelenleg előzetes verzióban)
rowversion Sorverzió típusa; nem szerepel az API-válaszokban
sql_variant Változó típusú oszlopok; nem támogatott típuskövetkeztetés
vector Vektortípus (jelenleg előzetes verzióban)
xml XML-típus; a szerializálás nem támogatott

Azure Cosmos DB for NoSQL

Sémakövetelmény

A relációs adatbázisoktól eltérően az Azure Cosmos DB for NoSQL sémafüggetlen. A DAB nem tud betekinteni egy Cosmos DB-tárolóba GraphQL-típusok létrehozásához. Meg kell adnia egy GraphQL-sémafájlt (.gql), amely meghatározza a dokumentumstruktúrát.

A sémafájl szabványos GraphQL-sémadefiníciós nyelvet (SDL) használ két egyéni direktívával:

Irányelv Szükséges Description
@model Igen GraphQL-típus leképezése DAB-entitásnévre
@authorize No Adott szerepkörökhöz való mező- vagy típushozzáférés korlátozása

@model irányelv

Az @model(name: "...") irányelvre minden OLYAN GraphQL-típusra szükség van, amelyet a DAB-n keresztül tesz elérhetővé. Az name értéknek pontosan meg kell egyeznie a DAB-konfigurációs fájl entitásnevével.

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

@authorize irányelv

Az @authorize irányelv mezőszintű és típusszintű hozzáférés-vezérlést biztosít a Cosmos DB GraphQL-lekérdezésekhez. Elfogad egy paramétert roles , amely felsorolja a mezőhöz vagy típushoz hozzáférő szerepköröket.

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

A típusszinten is alkalmazható @authorize :

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

Fontos

Az @authorize irányelv entitásszintű engedélyeket ad hozzá . Az irányelvnek és az entitás engedélyblokkjának egyaránt engedélyeznie kell a hozzáférés-kérés sikerességét. Ha egy mező rendelkezik @authorize(roles: ["editor"]) , de az entitás nem rendelkezik engedélybejegyzéssel editor, a kérés megtagadva.

Megjegyzés:

@authorize(policy: "...") nem támogatott. Csak használjon @authorize(roles: [...]) .

A teljes telepítési útmutatót az Azure Cosmos DB for NoSQL-hez készült Data API Builder beállítása című témakörben találja.

A REST API elérhetetlensége

A DAB nem hoz létre REST-végpontokat az Azure Cosmos DB for NoSQL-hez. Az Azure Cosmos DB átfogó natív REST API-t biztosít a dokumentumműveletekhez. Csak GraphQL-végpontok jönnek létre. Az OpenAPI-dokumentumok nem jönnek létre Cosmos DB-entitásokhoz.

Az adatok REST-en keresztüli eléréséhez használja közvetlenül az Azure Cosmos DB REST API-t .

A Cosmos DB nem támogatott funkciói

Az Azure Cosmos DB for NoSQL nem támogatja a következő funkciókat:

Funkció Jegyzetek
REST-végpontok Használja inkább a natív Cosmos DB REST API-t
Adatbázis-szabályzatok A házirend-predikátumok relációs lekérdezési szemantikát igényelnek
Tárolt eljárások DAB-entitásokként nem támogatott
Relationships A tárolók közötti kapcsolatok nem támogatottak
Rendezés ($orderby) A GraphQL-lekérdezések nem támogatottak
Aggregation Nem támogatott
Több mutáció Nem támogatott
Munkamenet-környezet SQL-specifikus funkció

PostgreSQL

Minimális verzió

A PostgreSQL 11 vagy újabb verziójára van szükség. A DAB PostgreSQL-illesztőként használja Npgsql .

Nem támogatott adattípusok

A DAB nem támogatja a következő PostgreSQL-adattípusokat:

Adattípus Jegyzetek
bytea Bináris sztring; a szerializálás nem támogatott
date Használja a timestamp vagy timestamptz formátumot
smalldatetime Nem natív PostgreSQL-típus
datetime2 Nem natív; jellemzően a timestamp
timestamptz Időbélyeg időzónával; nem támogatott
time Dátum nélküli nap időpontja
localtime Rendszeróra-alapú idő

Tárolt eljárások

A tárolt eljárások nem támogatottak a PostgreSQL-entitások esetében. Használjon inkább táblákat és nézeteket.

MySQL

Minimális verzió

A MySQL 8 vagy újabb verziójára van szükség.

Nem támogatott adattípusok

A DAB nem támogatja a következő MySQL-adattípusokat:

Adattípus Jegyzetek
UUID Univerzálisan egyedi azonosítók
DATE Naptárdátumok
SMALLDATETIME Kevésbé pontos dátum- és időtárolás
DATETIME2 Nem natív; Használja datetime
DATETIMEOFFSET Dátumok és időpontok időzónával
TIME Dátum nélküli nap időpontja
LOCALTIME Aktuális idő a rendszeróra alapján

Tárolt eljárások

A tárolt eljárások nem támogatottak a MySQL-entitások esetében. Használjon inkább táblákat.

Azure Synapse Analytics (dedikált SQL-készlet)

Támogatott objektumok

A dedikált SQL-készlet a táblákat, a nézeteket és a tárolt eljárásokat támogatja– ugyanúgy, mint az SQL Server és az Azure SQL. A kiszolgáló nélküli SQL-készlet nem támogatott.

Nem támogatott funkciók

Funkció Jegyzetek
Több mutáció Nem támogatott