Udostępnij za pośrednictwem


Dokumentacja funkcji specyficznych dla bazy danych dla konstruktora interfejsu API danych

Ta dokumentacja obejmuje funkcje, zachowania i wymagania specyficzne dla co najmniej jednej platformy bazy danych obsługiwanej przez konstruktora interfejsu API danych (DAB). Aby zapoznać się z macierzą porównania funkcji między bazami danych, zobacz Dostępność funkcji.

Obsługa wersji bazy danych

Język DAB obsługuje następujące platformy baz danych. Minimalne wymagania dotyczące wersji dotyczą wdrożeń zarządzanych samodzielnie. Bazy danych Typu platforma jako usługa (PaaS) nie mają wymagań dotyczących minimalnej wersji, ponieważ usługa zarządza wersją.

Platforma bazy danych Abbreviation Minimalna wersja Notatki
SQL Server Rodzina SQL 2016
Azure SQL Rodzina SQL Nie dotyczy (PaaS)
Microsoft Fabric SQL Rodzina SQL Nie dotyczy (PaaS)
Azure Cosmos DB for NoSQL Cosmos DB Nie dotyczy (PaaS) Tylko graphQL; brak punktów końcowych REST
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (Dedykowana pula SQL) SQLDW Nie dotyczy (PaaS) Bezserwerowa pula SQL nie jest obsługiwana

Ważna

Sprawdź, czy zarówno lokalna baza danych deweloperów, jak i dowolna wdrożona baza danych spełniają minimalne wymagania dotyczące wersji. Język DAB łączy się przy użyciu tego samego sterownika w obu środowiskach. Starsza wersja w obu lokalizacjach powoduje błędy środowiska uruchomieniowego.

SQL Server i Azure SQL

SESSION_CONTEXT

W przypadku programu SQL Server i usługi Azure SQL usługa DAB może propagować uwierzytelnione oświadczenia użytkowników do bazy danych, wywołując wywołanie sp_set_session_context przed wykonaniem każdego zapytania. Ten mechanizm umożliwia natywnym dla języka SQL zasad zabezpieczeń na poziomie wiersza i procedur składowanych odczytywanie tożsamości obiektu wywołującego z aparatu bazy danych.

Po set-session-context włączeniu w konfiguracji języka DAB usługa DAB wysyła wszystkie uwierzytelnione oświadczenia jako pary klucz-wartość:

EXEC sp_set_session_context 'roles', 'editor', @read_only = 0;
EXEC sp_set_session_context 'oid', 'a1b2c3d4-...', @read_only = 0;
-- Your query executes after claims are set
SELECT * FROM dbo.Documents;

Typowe wysyłane oświadczenia obejmują roles, sub, oidi wszelkie niestandardowe oświadczenia, które dostawca tożsamości zawiera w zestawie JWT.

Włączanie SESSION_CONTEXT

Ustaw --set-session-context true podczas wywoływania elementu dab init:

dab init \
  --database-type mssql \
  --connection-string "@env('SQL_CONNECTION_STRING')" \
  --set-session-context true

Możesz też ustawić właściwość bezpośrednio w pliku dab-config.json:

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "options": {
      "set-session-context": true
    }
  }
}

Ostrzeżenie

Włączenie set-session-context wyłącza buforowanie odpowiedzi dla tego źródła danych. Ponieważ każde żądanie ustawia odrębne wartości sesji, buforowane odpowiedzi z sesji jednego użytkownika nie mogą być obsługiwane do innego.

Używanie SESSION_CONTEXT w programie SQL

Po włączeniu set-session-contextobiektów SQL można odczytać wartości oświadczenia:

-- Read a claim in a stored procedure
DECLARE @role NVARCHAR(256) = CAST(SESSION_CONTEXT(N'roles') AS NVARCHAR(256));

-- Use a claim in a row-level security predicate function
CREATE FUNCTION dbo.RlsPredicate(@claimRole NVARCHAR(256))
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN SELECT 1 AS result
WHERE @claimRole = CAST(SESSION_CONTEXT(N'roles') AS NVARCHAR(256));

Aby zapoznać się z pełnym przewodnikiem, zobacz Implementowanie zabezpieczeń na poziomie wiersza z kontekstem sesji.

SESSION_CONTEXT i buforowanie połączeń

DaB resetuje wszystkie wartości kontekstu sesji na początku każdego żądania. Jednak ze względu na to, że set-session-context wymusza semantyka połączeń dla użytkownika, ponowne użycie połączenia między użytkownikami jest unikane automatycznie po włączeniu tej opcji.

Warianty parametrów połączenia

Język DAB jest używany Microsoft.Data.SqlClient dla programu SQL Server i usługi Azure SQL. Biblioteka obsługuje te formaty parametrów połączenia.

Typowe formaty:

Metoda uwierzytelniania Wzorzec parametrów połączenia
Logowanie sql Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
Tożsamość zarządzana Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Użytkownikowi Przypisana Tożsamość Zarządzana Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Domyślne poświadczenia platformy Azure Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Wskazówka

Przechowuj parametry połączenia w zmiennych środowiskowych i odwołuj się do nich za pomocą polecenia @env('SQL_CONNECTION_STRING'). W przypadku wdrożeń produkcyjnych należy przechowywać parametry połączenia w usłudze Azure Key Vault i odwoływać się do niego za pomocą polecenia @akv().

Nieobsługiwane typy danych

Następujące typy danych SQL Server i Azure SQL nie są obsługiwane przez język DAB:

Typ danych Powód
geography Typ geoprzestrzenny; serializacja nie jest obsługiwana
geometry Typ przestrzenny planarny; serializacja nie jest obsługiwana
hierarchyid Hierarchiczny typ danych; serializacja nie jest obsługiwana
json Natywny typ JSON (obecnie w wersji zapoznawczej)
rowversion Typ przechowywania wersji wierszy; nieuwzględniane w odpowiedziach interfejsu API
sql_variant Kolumny typu zmiennego; wnioskowanie typu nie jest obsługiwane
vector Typ wektora (obecnie w wersji zapoznawczej)
xml Typ XML; serializacja nie jest obsługiwana

Azure Cosmos DB for NoSQL

Wymaganie dotyczące schematu

W przeciwieństwie do relacyjnych baz danych usługa Azure Cosmos DB for NoSQL jest niezależna od schematu. Język DAB nie może introspekować kontenera usługi Cosmos DB w celu wygenerowania typów GraphQL. Musisz podać plik schematu GraphQL (.gql), który definiuje strukturę dokumentu.

Plik schematu używa standardowego języka programowania GraphQL Schema Definition Language (SDL) z dwiema dyrektywami niestandardowymi:

Dyrektywa Wymagane Description
@model Yes Mapuje typ graphQL na nazwę jednostki DAB
@authorize Nie. Ogranicza dostęp do pól lub typów do określonych ról

@model dyrektywa

Dyrektywa jest wymagana @model(name: "...") w każdym typie GraphQL udostępnianym za pośrednictwem języka DAB. Wartość musi być dokładnie zgodna name z nazwą jednostki w pliku konfiguracji daB.

type Book @model(name: "Book") {
  id: ID
  title: String
  year: Int
}

@authorize dyrektywa

Dyrektywa @authorize zapewnia kontrolę dostępu na poziomie pola i na poziomie typu dla zapytań GraphQL usługi Cosmos DB. Akceptuje roles on parametr zawierający listę ról, które mogą uzyskiwać dostęp do pola lub typu.

type Book @model(name: "Book") {
  id: ID
  title: String @authorize(roles: ["authenticated", "librarian"])
  internalNotes: String @authorize(roles: ["editor"])
}

Można również zastosować na @authorize poziomie typu:

type InternalReport @model(name: "InternalReport") @authorize(roles: ["auditor"]) {
  id: ID
  summary: String
}

Ważna

Dyrektywa @authorizedodaje uprawnienia na poziomie jednostki. Zarówno dyrektywa, jak i blok uprawnień jednostki muszą zezwalać na pomyślne żądanie dostępu. Jeśli pole ma @authorize(roles: ["editor"]) wartość , ale jednostka nie ma wpisu uprawnień dla editor, żądanie zostanie odrzucone.

Uwaga / Notatka

@authorize(policy: "...") nie jest obsługiwany. Użyj tylko.@authorize(roles: [...])

Aby uzyskać pełny przewodnik konfiguracji, zobacz Konfigurowanie konstruktora interfejsu API danych dla usługi Azure Cosmos DB for NoSQL.

Niedostępność interfejsu API REST

Język DAB nie generuje punktów końcowych REST dla usługi Azure Cosmos DB for NoSQL. Usługa Azure Cosmos DB udostępnia kompleksowy natywny interfejs API REST na potrzeby operacji dokumentów. Generowane są tylko punkty końcowe GraphQL. Dokumenty Interfejsu OpenAPI nie są generowane dla jednostek usługi Cosmos DB.

Aby uzyskać dostęp do danych za pośrednictwem interfejsu REST, użyj bezpośrednio interfejsu API REST usługi Azure Cosmos DB .

Nieobsługiwane funkcje dla usługi Cosmos DB

Następujące funkcje nie są obsługiwane w przypadku usługi Azure Cosmos DB for NoSQL:

Funkcja Notatki
Punkty końcowe REST Zamiast tego użyj natywnego interfejsu API REST usługi Cosmos DB
Zasady bazy danych Predykaty zasad wymagają semantyki zapytań relacyjnych
Procedury przechowywane Nieobsługiwane jako jednostki języka DAB
Relacje Relacje między kontenerami nie są obsługiwane
Sortowanie ($orderby) Nieobsługiwane w zapytaniach GraphQL
Aggregation Niewspierane
Wiele mutacji Niewspierane
Kontekst sesji Funkcja specyficzna dla języka SQL

PostgreSQL

Minimalna wersja

Wymagany jest program PostgreSQL 11 lub nowszy. Język DAB używa Npgsql jako sterownika PostgreSQL.

Nieobsługiwane typy danych

Następujące typy danych PostgreSQL nie są obsługiwane przez język DAB:

Typ danych Notatki
bytea Ciąg binarny; serializacja nie jest obsługiwana
date Użyj timestamp lub timestamptz
smalldatetime Nie jest natywnym typem bazy danych PostgreSQL
datetime2 Nie natywne; zwykle obsługiwane przez timestamp
timestamptz Sygnatura czasowa ze strefą czasową; nieobsługiwane
time Godzina dnia bez daty
localtime Czas zegara systemowego

Procedury przechowywane

Procedury składowane nie są obsługiwane w przypadku jednostek PostgreSQL. Zamiast tego użyj tabel i widoków.

MySQL

Minimalna wersja

Wymagany jest program MySQL 8 lub nowszy.

Nieobsługiwane typy danych

Następujące typy danych MySQL nie są obsługiwane przez język DAB:

Typ danych Notatki
UUID Unikatowe identyfikatory uniwersalne
DATE Daty kalendarza
SMALLDATETIME Mniej precyzyjny magazyn daty i godziny
DATETIME2 Nie natywne; Używać datetime
DATETIMEOFFSET Daty i godziny ze strefą czasową
TIME Godzina dnia bez daty
LOCALTIME Bieżący czas na podstawie zegara systemowego

Procedury przechowywane

Procedury składowane nie są obsługiwane w przypadku jednostek MySQL. Zamiast tego użyj tabel.

Azure Synapse Analytics (Dedykowana pula SQL)

Obsługiwane obiekty

Dedykowana pula SQL obsługuje tabele, widoki i procedury składowane — takie same jak sql Server i Azure SQL. Bezserwerowa pula SQL nie jest obsługiwana.

Nieobsługiwane funkcje

Funkcja Notatki
Wiele mutacji Niewspierane