次の方法で共有


データ ソース

data-sourceセクションでは、データベース アクセスの詳細を定義します。 また、データベース オプションも定義します。

データ ソースの設定

Property Description
data-source データベース接続設定を含むオブジェクト
data-source.database-type バックエンドで使用されるデータベース: mssqlpostgresqlmysqlcosmosdb_nosqlcosmosdb_postgresql
data-source.connection-string 選択したデータベースの種類の接続文字列
data-source.options データベース固有のプロパティ (SQL Server、Cosmos DB などのオプションなど)
data-source.options.database Azure Cosmos DB for NoSQL データベースの名前 ( database-type = cosmosdb_nosql時に必要)
data-source.options.container Azure Cosmos DB for NoSQL コンテナーの名前 ( database-type = cosmosdb_nosql時に必要)
data-source.options.schema GraphQL スキーマ ファイルへのパス ( database-type = cosmosdb_nosql時に必要)
data-source.options.set-session-context セッション コンテキストとして JSON Web トークン (JWT) 要求を送信できるようにします (SQL Server のみ)
data-source.health データ ソースの正常性チェックを構成するオブジェクト
data-source.health.enabled 正常性チェック エンドポイントを有効にします
data-source.health.name 正常性レポートで使用される識別子
data-source.health.threshold-ms 正常性チェック クエリの最大期間 (ミリ秒単位)
data-source.user-delegated-auth On-Behalf-Of (OBO) ユーザー委任認証を構成するオブジェクト (mssql のみ)
data-source.user-delegated-auth.enabled OBO 認証を有効にする
data-source.user-delegated-auth.provider OBO ID プロバイダー (現在 EntraId のみ)
data-source.user-delegated-auth.database-audience ダウンストリーム SQL トークンの対象ユーザー

書式の概要

{
  "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>"]
}

データ ソース

Parent Property タイプ Required Default
$root data-source オブジェクト ✔️ はい -

入れ子になったプロパティ

Parent Property タイプ Required Default
data-source database-type 列挙型 ✔️ はい None
data-source connection-string 文字列 ✔️ はい None
data-source options オブジェクト ❌ いいえ None

プロパティ値

database-type Description 最小バージョン
mssql Fabric の SQL -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Fabric Warehouse -
dwsql 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>
    }
  }
}

例: Azure SQL および 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

これらの接続文字列バリアントをサポートする Azure SQL と SQL Server には、SqlClientを使用します。

消費 SESSION_CONTEXT

Azure SQL および SQL Server の場合、データ API ビルダーは 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;

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

指定された "オプション" (databasecontainer、および schema) は、Azure Cosmos DB に固有です。

環境変数

環境変数を使用して、プレーンテキスト シークレットを構成ファイルから除外します。

Tip

データ API ビルダーでは、 @env() 関数 ファイルと .env ファイルの両方がサポートされます。

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

接続の弾力性

データ API ビルダーは、指数バックオフを使用して、一時的なエラーの後にデータベース要求を再試行します。

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

マネージド サービス ID (MSI)

マネージド サービス ID (MSI) は、DefaultAzureCredential ライブラリで定義されているAzure.Identityでサポートされています。 Microsoft Entra for Azure SQL のマネージド ID の詳細について説明します。

User-Assigned マネージド ID (UAMI)

ユーザー割り当てマネージド ID の場合は、ユーザー割り当てマネージド ID のクライアント IDAuthentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;に置き換えながら、認証とユーザー ID のプロパティを接続文字列に追加します。

System-Assigned マネージド ID (SAMI)

システム割り当てマネージド ID の場合は、Authentication プロパティを追加し、接続文字列 (Authentication=Active Directory Managed Identity;) から UserId 引数と Password 引数を除外します。

正常性 (データ ソース)

Parent Property タイプ Required Default
data-source health オブジェクト No

データ API ビルダーでは、複数の構成ファイルがサポートされ、それぞれに独自のデータ ソースが含まれています。 この構成ブロックを使用すると、各データ ソースに独自の正常性構成を設定できます。

入れ子になったプロパティ

Parent Property タイプ Required Default
data-source.health enabled boolean No true
data-source.health name 文字列 No database-type
data-source.health threshold-ms 整数 No 1000

名前を確認する

複数の構成ファイルが同じ種類のデータ ソースを指している可能性があるため、正常性レポートではそれらのデータ ソースを区別できません。 nameを使用して、正常性レポートでのみ使用される一意の識別可能なラベルを割り当てます。

動作を確認する

データベースの種類に固有の最も単純なクエリは、指定されたデータ ソースに対して実行され、接続を開くことができることを検証します。 threshold-ms プロパティを使用して、そのクエリが完了するまでの最大許容期間 (ミリ秒単位) を構成します。

Format

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

ユーザー委任認証

Parent Property タイプ Required Default
data-source user-delegated-auth オブジェクト No

SQL Server と Azure SQL のオンBehalf-Of (OBO) ユーザー委任認証。 有効にすると、DAB は受信ユーザー トークンをダウンストリーム SQL トークンと交換し、データベースが実際の呼び出し元ユーザーとして認証されるようにします。 この機能は、 mssql データ ソースでのみサポートされており、アップストリームで Entra ID 認証が必要です。

Note

このセクションで説明する Data API Builder 2.0 の機能は現在プレビュー段階であり、一般公開前に変更される可能性があります。 詳細については、「 バージョン 2.0 の新機能」を参照してください。

入れ子になったプロパティ

Parent Property タイプ Required Default
data-source.user-delegated-auth enabled boolean No false
data-source.user-delegated-auth provider enum (EntraId) No EntraId
data-source.user-delegated-auth database-audience 文字列 はい (有効な場合) None
  • enabled—OBO のオンとオフを切り替えます。
  • provider—トークン交換の ID プロバイダー。 現在、EntraId のみがサポートされています。
  • database-audience—ダウンストリーム SQL トークンの対象ユーザー (たとえば、 https://database.windows.net)。

必要な環境変数

OBO が有効になっている場合、DAB はトークン交換のために次の環境変数を読み取ります。

Variable Description
DAB_OBO_CLIENTID Entra ID アプリ登録のアプリケーション (クライアント) ID
DAB_OBO_CLIENTSECRET アプリ登録のクライアント シークレット
DAB_OBO_TENANTID Entra ID テナント ID

ユーザーごとの接続プール

OBO が有効になっている場合、DAB はユーザーごとに個別の SQL 接続プールを維持し、あるユーザーのアクセス トークンが別のユーザーの要求に再利用されないようにします。

Note

ユーザーごとの接続プールは、OBO 認証がアクティブな場合にのみ適用されます。 標準デプロイは影響を受けません。

Format

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

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

Important

OBO は、 mssqlでのみサポートされます。 OBO が有効な場合は、 database-audience プロパティが必要です。 MSSQL 以外のデータ ソースに対してこの構成を実行すると、検証に失敗します。