Sdílet prostřednictvím


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.