Condividi tramite


L'origine dei dati

La data-source sezione definisce i dettagli di accesso al database. Definisce anche le opzioni di database.

Impostazioni origine dati

Property Description
origine dati Oggetto contenente le impostazioni di connettività del database
data-source.database-type Database usato nel back-end: mssql, postgresqlmysql, , cosmosdb_nosql,cosmosdb_postgresql
data-source.connection-string Stringa di connessione per il tipo di database selezionato
data-source.options Proprietà specifiche del database (ad esempio, opzioni per SQL Server, Cosmos DB e così via)
data-source.options.database Nome del database Azure Cosmos DB per NoSQL (obbligatorio quando database-type = cosmosdb_nosql)
data-source.options.container Nome del contenitore Azure Cosmos DB per NoSQL (obbligatorio quando database-type = cosmosdb_nosql)
data-source.options.schema Percorso del file di schema GraphQL (obbligatorio quando database-type = cosmosdb_nosql)
data-source.options.set-session-context Abilita l'invio di attestazioni JWT (JSON Web Token) come contesto di sessione (solo SQL Server)
data-source.health Oggetto che configura i controlli di integrità per l'origine dati
data-source.health.enabled Abilita l'endpoint di controllo integrità
data-source.health.name Identificatore usato nel report sull'integrità
data-source.health.threshold-ms Durata massima in millisecondi per la query di controllo integrità
data-source.user-delegated-auth Configurazione dell'oggetto on-Behalf-Of (OBO) autenticazione delegata dall'utente (solo mssql)
data-source.user-delegated-auth.enabled Abilita l'autenticazione OBO
data-source.user-delegated-auth.provider Provider di identità OBO (attualmente EntraId solo)
data-source.user-delegated-auth.database-audience Destinatari del token SQL downstream

Panoramica del formato

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      // mssql only
      "set-session-context": <true> (default) | <false>,
      // cosmosdb_nosql only
      "database": <string>,
      "container": <string>,
      "schema": <string>
    },
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    },
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  },
  "data-source-files": ["<string>"]
}

L'origine dei dati

Parent Property Type Required Default
$root data-source object ✔️ Sì -

Proprietà annidate

Parent Property Type Required Default
data-source database-type enum ✔️ Sì None
data-source connection-string string ✔️ Sì None
data-source options object ❌ No None

Valori delle proprietà

database-type Description Versione minima
mssql SQL in Fabric -
mssql Database SQL di Microsoft Azure -
mssql Istanza gestita di SQL di Azure -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Magazzino tessuti -
dwsql Endpoint di Analisi SQL di Infrastruttura -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB per il NoSQL -
cosmosdb_postgresql Azure Cosmos DB con PostgreSQL -

Format

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "<key-name>": <string>
    }
  }
}

Esempio: SQL di Azure e SQL Server

"data-source": {
  "database-type": "mssql",
  "connection-string": "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
    "options": {
      "set-session-context": true
    }
}

Note

Viene usato SqlClient per SQL di Azure e SQL Server, che supporta queste varianti di stringhe di connessione.

Consumare SESSION_CONTEXT

Per SQL di Azure e SQL Server, Il generatore di API dati può includere le informazioni sulle attestazioni in SQL SESSION_CONTEXT.

CREATE PROC GetUser @userId INT AS
BEGIN
    -- Use claims
    IF SESSION_CONTEXT(N'user_role') = 'admin' 
    BEGIN
        RAISERROR('Unauthorized access', 16, 1);
    END

    SELECT Id, Name, Age, IsAdmin
    FROM Users
    WHERE Id = @userId;
END;

Esempio: Azure Cosmos DB

"data-source": {
  "database-type": "cosmosdb_nosql",
  "connection-string": "@env('SQL_CONNECTION_STRING')",
  "options": {
    "database": "Your_CosmosDB_Database_Name",
    "container": "Your_CosmosDB_Container_Name",
    "schema": "Path_to_Your_GraphQL_Schema_File"
  }
}

Note

Le "opzioni" specificate (database, containere schema) sono specifiche di Azure Cosmos DB.

Variabili di ambiente

Usare le variabili di ambiente per mantenere i segreti di testo normale all'esterno del file di configurazione.

Tip

Il generatore di API dati supporta sia la funzione che .envi @env() file.

"data-source": {
  "database-type": "mssql",
  "connection-string": "@env('SQL_CONNECTION_STRING')"
}

Resilienza della connessione

Il generatore di API dati usa il backoff esponenziale per ripetere le richieste di database dopo errori temporanei.

Attempts First Second Third Fourth Fifth
Seconds 2s 4s 8s 16s 32s

Identità del servizio gestito

Le identità del servizio gestito sono supportate con DefaultAzureCredential la libreria definita.Azure.Identity Altre informazioni sulle identità gestite in Microsoft Entra per SQL di Azure.

identità gestite User-Assigned (UAMI)

Per Identità gestita assegnata dall'utente, aggiungere le proprietà Autenticazione e ID utente alla stringa di connessione sostituendo l'ID client dell'identità gestita assegnata dall'utente: Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

identità gestita System-Assigned (SAMI)

Per Identità gestita assegnata dal sistema, aggiungere la proprietà Authentication ed escludere gli argomenti UserId e Password dalla stringa di connessione: Authentication=Active Directory Managed Identity;.

Integrità (origine dati)

Parent Property Type Required Default
data-source health object No

Il generatore di API dati supporta più file di configurazione, ognuno con la propria origine dati. Questo blocco di configurazione consente a ogni origine dati di avere una propria configurazione di integrità.

Proprietà annidate

Parent Property Type Required Default
data-source.health enabled boolean No true
data-source.health name string No database-type
data-source.health threshold-ms integer No 1000

Controlla nome

Poiché più file di configurazione possono puntare a origini dati dello stesso tipo, tali origini dati non possono essere distinte nel report sull'integrità. Usare name per assegnare un'etichetta univoca e identificabile usata solo nel report sull'integrità.

Controllare il comportamento

La query più semplice possibile, specifica del tipo di database, viene eseguita sull'origine dati specificata per verificare che la connessione possa essere aperta. Utilizzare la threshold-ms proprietà per configurare la durata massima accettabile (in millisecondi) per il completamento della query.

Format

{
  "data-source": {
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  }
}

Autenticazione delegata dall'utente

Parent Property Type Required Default
data-source user-delegated-auth object No

Autenticazione delegata dall'utente on-Behalf-Of (OBO) per SQL Server e Azure SQL. Se abilitata, DAB scambia il token utente in ingresso per un token SQL downstream in modo che il database esegua l'autenticazione come utente chiamante effettivo. Questa funzionalità è supportata solo per le mssql origini dati e richiede l'autenticazione di Entra ID upstream.

Note

La funzionalità Generatore API dati 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.

Proprietà annidate

Parent Property Type Required Default
data-source.user-delegated-auth enabled boolean No falso
data-source.user-delegated-auth provider enumerazione (EntraId) No EntraId
data-source.user-delegated-auth database-audience string Sì (se abilitata) None
  • enabled— attiva o disattiva OBO.
  • provider: provider di identità per lo scambio di token. Attualmente è supportato solo EntraId.
  • database-audience: il gruppo di destinatari per il token SQL downstream (ad esempio, https://database.windows.net).

Variabili di ambiente obbligatorie

Quando OBO è abilitato, DAB legge le variabili di ambiente seguenti per lo scambio di token:

Variable Description
DAB_OBO_CLIENTID ID applicazione (client) della registrazione dell'app Entra ID
DAB_OBO_CLIENTSECRET Segreto client per la registrazione dell'app
DAB_OBO_TENANTID Entra ID tenant ID

Pool di connessioni per utente

Quando OBO è abilitato, DAB gestisce pool di connessioni SQL separati per utente in modo che il token di accesso di un utente non venga mai riutilizzato per la richiesta di un altro utente.

Note

Il pool di connessioni per utente si applica solo quando l'autenticazione OBO è attiva. Le distribuzioni standard non sono interessate.

Format

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  }
}

Esempio

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": true,
      "provider": "EntraId",
      "database-audience": "https://database.windows.net"
    }
  }
}

Importante

OBO è supportato solo per mssql. La database-audience proprietà è obbligatoria quando OBO è abilitato. L'esecuzione di questa configurazione su un'origine dati non MSSQL non ha esito negativo.