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 az egyes adatbázisok saját adott funkciókkal rendelkezzenek. Ez a cikk az egyes adatbázisokhoz támogatott funkciókat ismerteti.

Adatbázis-verzió támogatása

Számos hagyományos adatbázis esetében minimális verzió szükséges a Data API Builderrel (DAB) való kompatibilitáshoz.

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

Ezzel szemben az Azure-felhőadatbázis-szolgáltatások nem igényelnek külön verziót a DAB-val.

Minimálisan 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-ben néhány egyedi tulajdonság létezik, beleértve a Azure SQL és a SQL Server is.

SESSION_CONTEXT

Azure SQL és SQL Server támogatják 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 a sorszintű biztonság (RLS) natív támogatását szeretné alkalmazni Azure SQL és SQL Server.

A Azure SQL és a SQL Server esetében a Data API Builder kihasználhatja a felhasználó által megadott metaadatoknak a mögöttes adatbázisba való küldésének előnyeitSESSION_CONTEXT. Az ilyen 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 használhatók (például biztonsági szabályzatok konfigurálásával), hogy tovább megakadályozzák az adatokhoz való hozzáférést olyan műveletekben, mint a SELECT, UPDATE, DELETE. Az SESSION_CONTEXT adatok az adatbázis-kapcsolat során érhetők el a kapcsolat lezárásáig. Ugyanezek az adatok egy tárolt eljáráson belül is felhasználhatók.

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

Konfigurálás SESSION_CONTEXT a optionsdata-source konfigurációs fájl szakaszának tulajdonságával. 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 kulcs-érték párokra lesz lefordítva a lekérdezésen keresztül SESSION_CONTEXT . Ezek a jogcímek magukban foglalják, de nem korlátozódnak a következőkre:

Description
aud Célközönség
iss Kiállító
iat Kiadás dátuma:
exp Lejárati idő
azp Alkalmazásazonosító
azpacr Az ügyfél hitelesítési módszere
name Tárgy
uti Egyedi jogkivonat-azonosító

További információ a jogcímekkel kapcsolatban: Microsoft Entra ID hozzáférési jogkivonat jogcímeinek referenciája.

Ezek a jogcímek SQL-lekérdezésre vannak 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 arra is számít, hogy a GraphQL objektumtípus-definíciói és mezői tartalmazzák a GraphQL-séma irá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 title tulajdonságokat tartalmaz Authors .

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" ]
      }
    ]
  }
  ...
}

A@authorize(z) utasítás csak a szerepkörrel metadataviewerauthenticatedés szerepkörrel roles:["metadataviewer","authenticated"] rendelkező felhasználókra korlátozza a title mezőhöz való hozzáférést. Hitelesített kérelmezők esetén a rendszerszerepkör authenticated automatikusan hozzá lesz 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 á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 segítségével korrelációt hozhat létre a GraphQL-objektumtípus és a megfelelő entitásnév között a futtatókörnyezet konfigurációjában. Az irányelv formátuma: @model(name:"<Entity_Name>")

Részletesebb példaként az @authorize irányelv a felső szintű típusdefinícióra is alkalmazható. Ez az alkalmazás kizárólag az irányelvben meghatározott szerepkörökre korlátozza a típushoz és mezőihez 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 közötti lekérdezések a NoSQL API-ban

A tárolókon végzett GraphQL-műveletek nem támogatottak. 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, ha frissíti az adatmodellt, hogy beágyazott formátumban tárolja az entitásokat ugyanabban a tárolóban. További információ: Adatmodellezés az Azure Cosmos DB for NoSQL-ben.