Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tvůrce rozhraní Data API umožňuje každé databázi mít vlastní specifické funkce. Tento článek podrobně popisuje funkce podporované pro každou databázi.
Podpora verzí databáze
Mnoho tradičních databází vyžaduje, aby byla minimální verze 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 JAZYKEM DAB, aniž by vyžadovaly konkrétní verzi.
| Minimální podporovaná verze | |
|---|---|
| Azure SQL | n/a |
| Azure Cosmos DB for NoSQL | n/a |
| Azure Cosmos DB for PostgreSQL | n/a |
Azure SQL a SQL Server
Existuje několik specifických vlastností, které jsou pro SQL jedinečné, včetně Azure SQL i SQL Serveru.
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) dostupné v Azure SQL a SQL Serveru.
V případě Azure SQL a SQL Serveru může tvůrce rozhraní Data API využít SESSION_CONTEXT k odesílání metadat zadaných 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 dále zabránilo přístupu k datům v operacích, jako je SELECT, UPDATE, DELETE. Data SESSION_CONTEXT jsou k dispozici pro databázi během připojení k databázi, dokud toto připojení nebude ukončeno. Stejná data je možné 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 data-source v 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í do SESSION_CONTEXT podkladové databáze. Všechny deklarace identity v tokenu se překládají do párů klíč-hodnota předaných prostřednictvím SESSION_CONTEXT dotazu. Patří mezi ně tyto deklarace identity, ale nejsou omezené na:
| Description | |
|---|---|
aud |
Audience |
iss |
Issuer |
iat |
Issued at |
exp |
Expiration time |
azp |
Application identifier |
azpacr |
Metoda ověřování klienta |
name |
Subject |
uti |
Jedinečný identifikátor tokenu |
Další informace o deklarací identity naleznete v tématu Referenční informace k deklaracím deklarací identity přístupového tokenu Microsoft Entra ID.
Tyto deklarace identity se překládají 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;
Potom 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žít Tvůrce rozhraní Data API s rozhraním API for NoSQL, musíte vytvořit soubor schématu GraphQL, který obsahuje definice typu objektu představující datový model kontejneru. Tvůrce rozhraní Data API také očekává, že definice a pole typu objektu GraphQL budou zahrnovat direktivu authorize schématu GraphQL, pokud chcete vynutit přísnější přístup pro čtení než anonymous.
Tento soubor schématu například představuje Book položku v kontejneru. Tato položka obsahuje minimálně title a Authors vlastnosti.
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 entities v 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"] omezením přístupu k title poli pouze uživatelům s rolemi metadataviewer a authenticated. U ověřených žadatele se systémová role authenticated automaticky přiřadí a eliminuje potřebu hlavičky X-MS-API-ROLE .
Pokud se ověřený požadavek musí spouštět v kontextu metadataviewer, měl by být doprovázen hlavičkou X-MS-API-ROLE požadavku typu nastavenou na metadataviewer. Pokud je však žádoucí anonymní přístup, musíte vynechat autorizovanou direktivu.
Direktiva @model se používá k navázání korelace mezi tímto typem objektu GraphQL a odpovídajícím názvem entity v konfiguraci modulu runtime. Direktiva je formátovaná takto: @model(name:"<Entity_Name>")
Jako podrobnější 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 napříč kontejnery v rozhraní API pro NoSQL
Operace GraphQL napříč kontejnery se nepodporují. Modul odpoví chybovou zprávou, 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.