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 options
data-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 anonymous
a .
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 metadataviewer
authenticated
é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 metadataviewer
kell 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.