Funzionalità specifiche del database per Generatore API dati
Generatore API dati consente a ogni database di avere le proprie funzionalità specifiche. Questo articolo illustra in dettaglio le funzionalità supportate per ogni database.
Supporto della versione del database
Molti database tradizionali richiedono una versione minima compatibile con Il generatore API dati (DAB).
Versione minima supportata | |
---|---|
SQL Server | 2016 |
MySQL | 8 |
PostgreSQL | 11 |
Al contrario, i servizi di database cloud di Azure funzionano con DAB fuori casella senza richiedere una versione specifica.
Versione minima supportata | |
---|---|
SQL di Azure | n/d |
Azure Cosmos DB for NoSQL | n/d |
Azure Cosmos DB for PostgreSQL | n/d |
Azure SQL e SQL Server
Esistono alcune proprietà specifiche che sono univoche per SQL, tra cui Azure SQL e SQL Server.
SESSION_CONTEXT
Azure SQL e SQL Server supportano l'uso della SESSION_CONTEXT
funzione per accedere all'identità dell'utente corrente. Questa funzionalità è utile quando si vuole applicare il supporto nativo per la sicurezza a livello di riga (RLS) disponibile in Azure SQL e SQL Server.
Per Azure SQL e SQL Server, Generatore API dati può sfruttare il vantaggio di SESSION_CONTEXT
inviare metadati specificati dall'utente al database sottostante. Tali metadati sono disponibili per generatore API dati a causa delle attestazioni presenti nel token di accesso. I dati inviati al database possono quindi essere usati per configurare un livello di sicurezza aggiuntivo ,ad esempio configurando i criteri di sicurezza, per impedire ulteriormente l'accesso ai dati nelle operazioni come SELECT, UPDATE, DELETE. I SESSION_CONTEXT
dati sono disponibili per il database durante la connessione al database finché tale connessione non viene chiusa. Gli stessi dati possono essere usati anche all'interno di una stored procedure.
Per altre informazioni sull'impostazione SESSION_CONTEXT
dei dati, vedere sp_set_session_context
(Transact-SQL).
Configurare SESSION_CONTEXT
l'uso options
data-source
della proprietà della sezione nel file di configurazione. Per altre informazioni, vedere data-source
Informazioni di riferimento sulla configurazione.
{
...
"data-source": {
"database-type": "mssql",
"options": {
"set-session-context": true
},
"connection-string": "<connection-string>"
},
...
}
In alternativa, usare l'argomento --set-session-context
con il dab init
comando .
dab init --database-type mssql --set-session-context true
Tutte le attestazioni presenti nel token EasyAuth/JWT vengono inviate tramite il SESSION_CONTEXT
database sottostante. Tutte le attestazioni presenti nel token vengono tradotte in coppie chiave-valore passate tramite SESSION_CONTEXT
query. Queste attestazioni includono, ma non sono limitate a:
Descrizione | |
---|---|
aud |
Destinatari |
iss |
Issuer |
iat |
Ora di emissione |
exp |
Scadenza |
azp |
Identificatore dell'applicazione |
azpacr |
Metodo di autenticazione del client |
name |
Oggetto |
uti |
Identificatore univoco del token |
Per altre informazioni sulle attestazioni, vedere Microsoft Entra ID informazioni di riferimento sulle attestazioni del token di accesso.
Queste attestazioni vengono tradotte in una query SQL. Questo esempio troncato illustra come sp_set_session_context
viene usato in questo contesto:
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;
È quindi possibile implementare la sicurezza a livello di riga usando i dati della sessione. Per altre informazioni, vedere Implementare la sicurezza a livello di riga con il contesto di sessione.
Azure Cosmos DB
Esistono alcune proprietà specifiche univoche per varie API in Azure Cosmos DB.
Schema nell'API per NoSQL
Azure Cosmos DB for NoSQL B è completamente indipendente dallo schema. Per usare Generatore API dati con l'API per NoSQL, è necessario creare un file di schema GraphQL che include le definizioni dei tipi di oggetto che rappresentano il modello di dati del contenitore. Il generatore api dati prevede inoltre che le definizioni e i campi del tipo di oggetto GraphQL includano la direttiva authorize
dello schema GraphQL quando si vuole applicare l'accesso in lettura più restrittivo rispetto anonymous
a .
Ad esempio, questo file di schema rappresenta un Book
elemento all'interno di un contenitore. Questo elemento contiene, almeno, title
e Authors
proprietà.
type Book @model(name:"Book"){
id: ID
title: String @authorize(roles:["metadataviewer","authenticated"])
Authors: [Author]
}
Questo schema di esempio corrisponde alla configurazione dell'entità seguente nel file di configurazione DAB. Per altre informazioni, vedere entities
Informazioni di riferimento sulla configurazione.
{
...
"Book": {
"source": "Book",
"permissions": [
{
"role": "anonymous",
"actions": [ "read" ]
},
{
"role": "metadataviewer",
"actions": [ "read" ]
}
]
}
...
}
La @authorize
direttiva con roles:["metadataviewer","authenticated"]
limita l'accesso title
al campo solo agli utenti con i ruoli metadataviewer
e authenticated
. Per i richiedenti autenticati, il ruolo authenticated
di sistema viene assegnato automaticamente, eliminando la necessità di un'intestazione X-MS-API-ROLE
.
Se la richiesta autenticata deve essere eseguita nel contesto di metadataviewer
, deve essere accompagnata da un'intestazione di richiesta di tipo X-MS-API-ROLE
impostata su metadataviewer
. Tuttavia, se l'accesso anonimo è desiderato, è necessario omettere la direttiva autorizzata.
La @model
direttiva viene utilizzata per stabilire una correlazione tra questo tipo di oggetto GraphQL e il nome di entità corrispondente nella configurazione di runtime. La direttiva viene formattata come: @model(name:"<Entity_Name>")
Come esempio più approfondito, la @authorize
direttiva può essere applicata alla definizione di tipo di primo livello. Questa applicazione limita l'accesso al tipo e ai relativi campi esclusivamente ai ruoli specificati all'interno della direttiva.
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": [ "*" ]
}
]
}
}
Query tra contenitori nell'API per NoSQL
Le operazioni GraphQL tra contenitori non sono supportate. Il motore risponde con un messaggio di errore che indica, Adding/updating Relationships is currently not supported in Azure Cosmos DB for NoSQL.
È possibile risolvere questa limitazione aggiornando il modello di dati per archiviare le entità all'interno dello stesso contenitore in un formato incorporato. Per altre informazioni, vedere Modellazione dei dati in Azure Cosmos DB per NoSQL.