Partilhar via


Origem de dados

A data-source seção define os detalhes de acesso ao banco de dados. Ele também define opções de banco de dados.

Configurações da fonte de dados

Property Description
Fonte de dados Objeto que contém configurações de conectividade de banco de dados
data-source.database-type. Base de dados utilizada no back-end: mssql, postgresql, mysql, cosmosdb_nosql, cosmosdb_postgresql
data-source.connection-string Cadeia de conexão para o tipo de banco de dados selecionado
data-source.options Propriedades específicas do banco de dados (por exemplo, opções para SQL Server, Cosmos DB, etc.)
data-source.options.database Nome do banco de dados do Azure Cosmos DB para NoSQL (obrigatório quando database-type = cosmosdb_nosql)
data-source.options.container Nome do contêiner do Azure Cosmos DB para NoSQL (necessário quando database-type = cosmosdb_nosql)
data-source.options.schema Caminho para o arquivo de esquema GraphQL (necessário quando database-type = cosmosdb_nosql)
data-source.options.set-session-context Permite o envio de declarações JSON Web Token (JWT) como contexto de sessão (somente SQL Server)
data-source.health Objeto configurando verificações de integridade para a fonte de dados
data-source.health.enabled Habilita o ponto de extremidade de verificação de integridade
data-source.health.name Identificador usado no relatório de integridade
data-fonte.saúde.threshold-ms Duração máxima em milissegundos para consulta de verificação de integridade
data-source.user-delegated-auth Configuração de objetos On-Behalf-Of (OBO) autenticação delegada pelo utilizador (apenas mssql)
data-source.user-delegated-auth.enabled Ativa autenticação por OBO
data-source.user-delegated-auth.provider Fornecedor de identidade OBO (apenas atualmente EntraId )
data-source.user-delegated-auth.database-audience Público-alvo para o token SQL a jusante

Visão geral do 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>"]
}

Origem de dados

Parent Property Tipo Required Default
$root data-source objecto ✔️ Sim -

Propriedades aninhadas

Parent Property Tipo Required Default
data-source database-type enumeração ✔️ Sim None
data-source connection-string cadeia (de caracteres) ✔️ Sim None
data-source options objecto ❌ Não None

Valores de propriedade

database-type Description Versão Min
mssql SQL na malha -
mssql Base de Dados SQL do Azure -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Armazém de Tecidos -
dwsql Ponto de extremidade do Fabric SQL Analytics -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB for NoSQL -
cosmosdb_postgresql Azure Cosmos DB for PostgreSQL -

Format

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

Exemplo: SQL do Azure & 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

Usamos SqlClient para Azure SQL e SQL Server, que suportam estas variantes de strings de ligação.

Consumir SESSION_CONTEXT

Para o SQL do Azure e o SQL Server, o construtor de API de Dados pode incluir informações de Declarações no 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;

Exemplo: 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

As "opções" especificadas (database, container, e schema) são específicas do Azure Cosmos DB.

Variáveis de ambiente

Use variáveis de ambiente para manter segredos de texto sem formatação fora do arquivo de configuração.

Tip

O Data API Builder suporta tanto a função como .env os@env() ficheiros.

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

Resiliência da conexão

O construtor de API de dados usa o Backoff Exponencial para repetir solicitações de banco de dados após erros transitórios.

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

Identidades de serviço gerenciado (MSI)

As Identidades de Serviço Gerenciado (MSI) são suportadas com DefaultAzureCredential as definidas na Azure.Identity biblioteca. Saiba mais sobre identidades gerenciadas no Microsoft Entra para Azure SQL.

User-Assigned identidades gerenciadas (UAMI)

Para a Identidade Gerida Atribuída pelo Utilizador, adicione as propriedades de Autenticação e ID de Utilizador à sua cadeia de ligação enquanto substitui o ID do cliente da Identidade Gerida Atribuída pelo Utilizador: Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

System-Assigned Identidade Gerenciada (SAMI)

Para Identidade Gerida Atribuída ao Sistema, adicione a propriedade de Autenticação e exclua os argumentos UserID e Password da sua string de ligação: Authentication=Active Directory Managed Identity;.

Saúde (Fonte de dados)

Parent Property Tipo Required Default
data-source health objecto No

O construtor de API de dados suporta vários arquivos de configuração, cada um com sua própria fonte de dados. Esse bloco de configuração permite que cada fonte de dados tenha sua própria configuração de integridade.

Propriedades aninhadas

Parent Property Tipo Required Default
data-source.health enabled boolean No true
data-source.health name cadeia (de caracteres) No database-type
data-source.health threshold-ms número inteiro No 1000

Nome de verificação

Como vários arquivos de configuração podem apontar para fontes de dados do mesmo tipo, essas fontes de dados não podem ser distinguidas no relatório de integridade. Use name para atribuir um rótulo exclusivo e identificável usado apenas no relatório de integridade.

Verificar o comportamento

A consulta mais simples possível, específica para o tipo de banco de dados, é executada na fonte de dados fornecida para validar que a conexão pode ser aberta. Use a threshold-ms propriedade para configurar a duração máxima aceitável (em milissegundos) para que a consulta seja concluída.

Format

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

Autenticação delegada pelo utilizador

Parent Property Tipo Required Default
data-source user-delegated-auth objecto No

On-Behalf-Of (OBO) autenticação delegada pelo utilizador para SQL Server e Azure SQL. Quando ativado, o DAB troca o token de utilizador recebido por um token SQL a jusante para que a base de dados se autentique como o utilizador efetivo que chama. Esta funcionalidade é suportada apenas para mssql fontes de dados e requer autenticação Entra ID a montante.

Note

A funcionalidade Data API builder 2.0 descrita nesta secção está atualmente em pré-visualização e pode mudar antes da disponibilidade geral. Para mais informações, consulte O que há de novo na versão 2.0.

Propriedades aninhadas

Parent Property Tipo Required Default
data-source.user-delegated-auth enabled boolean No falso
data-source.user-delegated-auth provider enum (EntraId) No EntraId
data-source.user-delegated-auth database-audience cadeia (de caracteres) Sim (quando ativado) None
  • enabled—liga ou desliga o OBO.
  • provider—o fornecedor de identidade para a troca de tokens. Atualmente, apenas EntraId é suportada.
  • database-audience—o público-alvo do token SQL a jusante (por exemplo, https://database.windows.net).

Variáveis de ambiente necessárias

Quando o OBO está ativado, o DAB lê as seguintes variáveis de ambiente para a troca de tokens:

Variable Description
DAB_OBO_CLIENTID ID da aplicação (cliente) do registo da aplicação Entra ID
DAB_OBO_CLIENTSECRET Segredo do cliente para o registo da aplicação
DAB_OBO_TENANTID Entra ID tenant ID

Pooling de ligações por utilizador

Quando o OBO está ativado, o DAB mantém pools de ligação SQL separados por utilizador, para que o token de acesso de um utilizador nunca seja reutilizado para o pedido de outro utilizador.

Note

O pooling de ligação por utilizador aplica-se apenas quando a autenticação OBO está ativa. As implementações padrão não são afetadas.

Format

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

Exemplo

{
  "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 é suportado apenas para mssql. A database-audience propriedade é necessária quando o OBO está ativado. Executar esta configuração contra uma fonte de dados que não seja MSSQL falha na validação.