Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |