Megosztás a következőn keresztül:


A Data API Builder adatbázis-specifikus funkciói

A Data API Builder lehetővé teszi, hogy minden adatbázis saját adott funkciókkal rendelkezzen. Ez a cikk az egyes adatbázisokhoz támogatott funkciókat ismerteti.

Adatbázis verziótámogatása

Számos hagyományos adatbázishoz minimális verzióra van szükség a Data API Builder (DAB) használatával való kompatibilitáshoz.

Minimális támogatott verzió
SQL Server 2016
MySQL 8
PostgreSQL 11

Ezzel szemben az Azure-felhőadatbázis-szolgáltatások a DAB-val a dobozon kívül működnek anélkül, hogy egy adott verziót kellene megkövetelni.

Minimális támogatott verzió
Azure SQL n/a
Azure Cosmos DB for NoSQL n/a
Azure Cosmos DB for PostgreSQL n/a

Azure SQL és SQL Server

Az SQL-hez egyedi tulajdonságok tartoznak, beleértve az Azure SQL-t és az SQL Servert is.

SESSION_CONTEXT

Az Azure SQL és az SQL Server támogatja a függvény használatát az SESSION_CONTEXT aktuális felhasználó identitásának eléréséhez. Ez a funkció akkor hasznos, ha az Azure SQL-ben és az SQL Serverben elérhető sorszintű biztonság (RLS) natív támogatását szeretné alkalmazni.

Az Azure SQL és az SQL Server esetében a Data API Builder kihasználhatja a SESSION_CONTEXT a felhasználó által megadott metaadatoknak a mögöttes adatbázisba való küldéséhez. Ezek a metaadatok a Hozzáférési jogkivonatban található jogcímek alapján érhetők el a Data API Builder számára. Az adatbázisba küldött adatok ezután további biztonsági szint konfigurálására (például biztonsági szabályzatok konfigurálásával) használhatók az olyan műveletek adataihoz való hozzáférés további megakadályozása érdekében, mint a SELECT, UPDATE, DELETE. A SESSION_CONTEXT adatok az adatbázis-kapcsolat során mindaddig elérhetők az adatbázis számára, amíg a kapcsolat be nem záródik. Ugyanezek az adatok egy tárolt eljáráson belül is használhatók.

További információ az adatok beállításáról SESSION_CONTEXT : sp_set_session_context (Transact-SQL).

Konfigurálja SESSION_CONTEXT a options konfigurációs fájl szakaszának tulajdonságát data-source . További információ: data-source konfigurációs referencia.

{
  ...
  "data-source": {
    "database-type": "mssql",
    "options": {
      "set-session-context": true
    },
    "connection-string": "<connection-string>"
  },
  ...
}

Másik lehetőségként használja az --set-session-context argumentumot a dab init paranccsal.

dab init --database-type mssql --set-session-context true

Az EasyAuth/JWT-jogkivonatban található összes jogcímet a rendszer a SESSION_CONTEXT mögöttes adatbázisba küldi. A jogkivonatban található összes jogcím le lesz fordítva a lekérdezésen keresztül SESSION_CONTEXT átadott kulcs-érték párokra. Ezek a jogcímek magukban foglalják, de nem korlátozódnak a következőkre:

Description
aud Audience
iss Issuer
iat Issued at
exp Expiration time
azp Application identifier
azpacr Az ügyfél hitelesítési módszere
name Subject
uti Egyedi jogkivonat-azonosító

A jogcímekkel kapcsolatos további információkért tekintse meg a Microsoft Entra ID hozzáférési jogkivonat jogcímeinek hivatkozását.

Ezek a jogcímek SQL-lekérdezésekké lesznek lefordítva. Ez a csonkolt példa bemutatja, hogyan sp_set_session_context használható ebben a környezetben:

EXEC sp_set_session_context 'aud', '<AudienceID>', @read_only = 1;
EXEC sp_set_session_context 'iss', 'https://login.microsoftonline.com/<TenantID>/v2.0', @read_only = 1;
EXEC sp_set_session_context 'iat', '1637043209', @read_only = 1;
...
EXEC sp_set_session_context 'azp', 'a903e2e6-fd13-4502-8cae-9e09f86b7a6c', @read_only = 1;
EXEC sp_set_session_context 'azpacr', 1, @read_only = 1;
..
EXEC sp_set_session_context 'uti', '_sSP3AwBY0SucuqqJyjEAA', @read_only = 1;
EXEC sp_set_session_context 'ver', '2.0', @read_only = 1;

Ezt követően a munkamenet adataival sorszintű biztonságot (RLS) valósíthat meg. További információ: sorszintű biztonság megvalósítása munkamenet-környezettel.

Azure Cosmos DB

Az Azure Cosmos DB különböző API-jaihoz egyedi tulajdonságok tartoznak.

Séma a NoSQL-hez készült API-ban

Az Azure Cosmos DB for NoSQL sémafüggetlen. Ahhoz, hogy a Data API Buildert a NoSQL API-val használhassa, létre kell hoznia egy GraphQL-sémafájlt, amely tartalmazza a tároló adatmodelljét képviselő objektumtípus-definíciókat. A Data API Builder azt is elvárja, hogy a GraphQL objektumtípus-definíciói és mezői tartalmazzák a GraphQL sémairányelvét authorize , ha szigorúbb olvasási hozzáférést szeretne kikényszeríteni, mint anonymousa .

Ez a sémafájl például egy tárolón Book belüli elemet jelöl. Ez az elem legalább titleAuthors a tulajdonságokat tartalmazza.

type Book @model(name:"Book"){
  id: ID
  title: String @authorize(roles:["metadataviewer","authenticated"])
  Authors: [Author]
}

Ez a példaséma a DAB-konfigurációs fájl alábbi entitáskonfigurációjának felel meg. További információ: entities konfigurációs referencia.

{
  ...
  "Book": {
    "source": "Book",
    "permissions": [
      {
        "role": "anonymous",
        "actions": [ "read" ]
      },
      {
        "role": "metadataviewer",
        "actions": [ "read" ]
      }
    ]
  }
  ...
}

Az @authorize irányelv a roles:["metadataviewer","authenticated"] mezőhöz való hozzáférést csak a title szerepkörrel metadataviewer rendelkező felhasználókra és authenticateda . Hitelesített kérelmezők esetén a rendszerszerepkör authenticated automatikusan ki van rendelve, így nincs szükség fejlécre X-MS-API-ROLE .

Ha a hitelesített kérést a környezetében metadataviewerkell végrehajtani, akkor a kérelem fejlécét a következőre X-MS-API-ROLE kell beállítani metadataviewer: . Ha azonban névtelen hozzáférésre van szükség, ki kell hagynia az engedélyezett irányelvet.

Az @model irányelv arra használható, hogy korrelációt hozzon létre a GraphQL-objektumtípus és a futtatókörnyezeti konfiguráció megfelelő entitásneve között. Az irányelv formátuma: @model(name:"<Entity_Name>")

Részletesebb példaként az @authorize irányelv a felső szintű típusdefiníciónál alkalmazható. Ez az alkalmazás kizárólag az irányelvben meghatározott szerepkörökre korlátozza a típushoz és a mezőkhöz való hozzáférést.

type Series @model(name:"Series") @authorize(roles:["editor","authenticated"]) {
  id: ID
  title: String
  Books: [Book]
}
{
  "Book": {
    "source": "Series",
    "permissions": [
      {
        "role": "authenticated",
        "actions": [ "read" ]
      },
      {
        "role": "editor",
        "actions": [ "*" ]
      }
    ]
  }
}

Tárolóközi lekérdezések az API for NoSQL-ben

A graphQL-műveletek nem támogatottak a tárolók között. A motor a következő hibaüzenettel válaszol: Adding/updating Relationships is currently not supported in Azure Cosmos DB for NoSQL.

Ezt a korlátozást megkerülheti úgy, hogy az adatmodellt úgy frissíti, hogy az entitásokat ugyanabban a tárolóban, beágyazott formátumban tárolja. További információ: adatmodellezés az Azure Cosmos DB for NoSQL-ben.