Funkce specifické pro databázi pro Tvůrce rozhraní DATA API
Tvůrce rozhraní API pro data umožňuje, aby každá databáze měla své vlastní specifické funkce. Tento článek podrobně popisuje funkce, které jsou podporovány pro každou databázi.
Podpora verzí databáze
Mnoho tradičních databází vyžaduje minimální verzi, aby byla kompatibilní s Tvůrcem rozhraní DATA API (DAB).
Minimální podporovaná verze | |
---|---|
SQL Server | 2016 |
MySQL | 8 |
PostgreSQL | 11 |
Cloudové databázové služby Azure naopak pracují s DAB bez nutnosti konkrétní verze.
Minimální podporovaná verze | |
---|---|
Azure SQL | Není k dispozici |
Azure Cosmos DB for NoSQL | Není k dispozici |
Azure Cosmos DB for PostgreSQL | Není k dispozici |
Azure SQL a SQL Server
Existuje několik specifických vlastností, které jsou pro SQL jedinečné, včetně Azure SQL i SQL Server.
SESSION_CONTEXT
Azure SQL a SQL Server podporují použití SESSION_CONTEXT
funkce pro přístup k identitě aktuálního uživatele. Tato funkce je užitečná, pokud chcete použít nativní podporu zabezpečení na úrovni řádků (RLS), která je k dispozici v Azure SQL a SQL Server.
Pro Azure SQL a SQL Server může Tvůrce rozhraní Data API využít výhod k odesílání metadat zadaných SESSION_CONTEXT
uživatelem do podkladové databáze. Tato metadata jsou k dispozici tvůrci rozhraní Data API na základě deklarací identity, které jsou přítomné v přístupovém tokenu. Data odeslaná do databáze se pak dají použít ke konfiguraci další úrovně zabezpečení (například konfigurací zásad zabezpečení), aby se zabránilo přístupu k datům v operacích, jako jsou SELECT, UPDATE, DELETE. Data SESSION_CONTEXT
jsou k dispozici databázi během připojení k databázi, dokud se toto připojení neskonciuje. Stejná data se dají použít i v uložené proceduře.
Další informace o nastavení SESSION_CONTEXT
dat najdete v tématu sp_set_session_context
(Transact-SQL).
Nakonfigurujte SESSION_CONTEXT
pomocí options
vlastnosti oddílu data-source
v konfiguračním souboru. Další informace najdete vdata-source
referenčních informacích ke konfiguraci.
{
...
"data-source": {
"database-type": "mssql",
"options": {
"set-session-context": true
},
"connection-string": "<connection-string>"
},
...
}
Případně použijte --set-session-context
argument s příkazem dab init
.
dab init --database-type mssql --set-session-context true
Všechny deklarace identity, které jsou přítomné v tokenu EasyAuth/JWT, se odesílají prostřednictvím objektu SESSION_CONTEXT
do podkladové databáze. Všechny deklarace identity, které jsou v tokenu, se přeloží na páry klíč-hodnota předávané prostřednictvím SESSION_CONTEXT
dotazu. Mezi tyto deklarace identity patří mimo jiné:
Description | |
---|---|
aud |
Cílová skupina |
iss |
Vystavitel |
iat |
Vydáno v |
exp |
Čas vypršení platnosti |
azp |
Identifikátor aplikace |
azpacr |
Metoda ověřování klienta |
name |
Předmět |
uti |
Jedinečný identifikátor tokenu |
Další informace o deklaracích identity najdete v referenčních informacích Microsoft Entra ID deklarací identity přístupových tokenů.
Tyto deklarace identity se přeloží do dotazu SQL. Tento zkrácený příklad ukazuje, jak sp_set_session_context
se používá v tomto kontextu:
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;
Pak můžete implementovat zabezpečení na úrovni řádků (RLS) pomocí dat relace. Další informace najdete v tématu implementace zabezpečení na úrovni řádků s kontextem relace.
Azure Cosmos DB
Existuje několik specifických vlastností, které jsou jedinečné pro různá rozhraní API ve službě Azure Cosmos DB.
Schéma v rozhraní API pro NoSQL
Azure Cosmos DB for NoSQL je nezávislá na schématu. Pokud chcete používat Tvůrce rozhraní DATA API s rozhraním API pro NoSQL, musíte vytvořit soubor schématu GraphQL, který obsahuje definice typů objektů představující datový model kontejneru. Tvůrce rozhraní Data API také očekává, že definice a pole typu objektu GraphQL budou obsahovat direktivu authorize
schématu GraphQL, pokud chcete vynutit více omezující přístup ke čtení než anonymous
.
Tento soubor schématu například představuje Book
položku v rámci kontejneru. Tato položka obsahuje minimálně title
vlastnosti a Authors
.
type Book @model(name:"Book"){
id: ID
title: String @authorize(roles:["metadataviewer","authenticated"])
Authors: [Author]
}
Toto ukázkové schéma odpovídá následující konfiguraci entity v konfiguračním souboru DAB. Další informace najdete ventities
referenčních informacích ke konfiguraci.
{
...
"Book": {
"source": "Book",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
},
{
"role": "metadataviewer",
"actions": [ "read" ]
}
]
}
...
}
Direktiva @authorize
s roles:["metadataviewer","authenticated"]
omezuje přístup k title
poli pouze na uživatele s rolemi metadataviewer
a authenticated
. Ověřeným žadatelům se automaticky přiřadí systémová role authenticated
, což eliminuje potřebu hlavičky X-MS-API-ROLE
.
Pokud je potřeba provést ověřený požadavek v kontextu metadataviewer
, měl by být doprovázen hlavičkou požadavku typu X-MS-API-ROLE
nastavenou na metadataviewer
. Pokud je však anonymní přístup žádoucí, musíte vynechat autorizovanou direktivu.
Direktiva @model
se používá k vytvoření korelace mezi tímto typem objektu GraphQL a odpovídajícím názvem entity v konfiguraci modulu runtime. Direktiva je naformátovaná takto: @model(name:"<Entity_Name>")
Jako hlubší příklad lze direktivu @authorize
použít v definici typu nejvyšší úrovně. Tato aplikace omezuje přístup k typu a jeho polím výhradně na role zadané v rámci direktivy.
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": [ "*" ]
}
]
}
}
Dotazy mezi kontejnery v rozhraní API pro NoSQL
Operace GraphQL napříč kontejnery se nepodporují. Modul odpoví chybovou zprávou s oznámením: Adding/updating Relationships is currently not supported in Azure Cosmos DB for NoSQL.
Toto omezení můžete obejít aktualizací datového modelu tak, aby ukládaly entity ve stejném kontejneru ve vloženém formátu. Další informace najdete v tématu Modelování dat ve službě Azure Cosmos DB for NoSQL.