次の方法で共有


データ API ビルダーのデータベース固有の機能リファレンス

このリファレンスでは、Data API Builder (DAB) でサポートされている 1 つ以上のデータベース プラットフォームに固有の機能、動作、要件について説明します。 データベース間機能の比較マトリックスについては、「 機能の可用性」を参照してください。

データベース バージョンのサポート

DAB では、次のデータベース プラットフォームがサポートされています。 最小バージョン要件は、セルフマネージド デプロイに適用されます。 サービスがバージョンを管理するため、サービスとしてのプラットフォーム (PaaS) データベースには最小バージョン要件はありません。

データベース プラットフォーム 略称 最小バージョン メモ
SQL Server SQL ファミリ 2016
Azure SQL SQL ファミリ N/A (PaaS)
Microsoft Fabric SQL SQL ファミリ N/A (PaaS)
Azure Cosmos DB for NoSQL Cosmos DB N/A (PaaS) GraphQL のみ。REST エンドポイントなし
PostgreSQL Pgsql 11
MySQL MySQL 8
Azure Synapse Analytics (専用 SQL プール) SQLDW N/A (PaaS) サーバーレス SQL プールはサポートされていません

Important

ローカル開発データベースとデプロイされたデータベースの両方が、最小バージョンの要件を満たしていることを確認します。 DAB は、両方の環境で同じドライバーを使用して接続します。 いずれかの場所の古いバージョンでは、ランタイム エラーが発生します。

SQL Server と Azure SQL

SESSION_CONTEXT

SQL Server と Azure SQL の場合、DAB は、各クエリを実行する前に sp_set_session_context を呼び出すことによって、認証済みのユーザー要求をデータベースに伝達できます。 このメカニズムにより、SQL ネイティブの行レベルのセキュリティ ポリシーとストアド プロシージャは、データベース エンジン内から呼び出し元の ID を読み取ります。

DAB 構成で set-session-context が有効になっている場合、DAB は認証されたすべての要求をキーと値のペアとして送信します。

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;

送信される一般的な要求には、 rolessuboid、および ID プロバイダーが JWT に含めるカスタム要求が含まれます。

SESSION_CONTEXTを有効にする

dab initを呼び出すときに--set-session-context trueを設定します。

dab init \
  --database-type mssql \
  --connection-string "@env('SQL_CONNECTION_STRING')" \
  --set-session-context true

または、 dab-config.jsonでプロパティを直接設定します。

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "options": {
      "set-session-context": true
    }
  }
}

Warnung

set-session-contextを有効にすると、そのデータ ソースの応答キャッシュが無効になります。 各要求は個別のセッション値を設定するため、あるユーザーのセッションからのキャッシュされた応答を別のユーザーに提供することはできません。

SQL でSESSION_CONTEXTを使用する

set-session-contextを有効にすると、SQL オブジェクトは要求値を読み取ることができます。

-- 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));

完全なチュートリアルについては、「 セッション コンテキストを使用して行レベルのセキュリティを実装する」を参照してください。

SESSION_CONTEXTと接続プール

DAB は、各要求の開始時にすべてのセッション コンテキスト値をリセットします。 ただし、 set-session-context はユーザーごとの接続セマンティクスを強制するため、このオプションを有効にすると、ユーザー間での接続の再利用は自動的に回避されます。

接続文字列のバリアント

DAB では、SQL Server と Azure SQL に Microsoft.Data.SqlClient が使用されます。 ライブラリでは、 これらの接続文字列形式がサポートされています。

一般的な形式:

認証方法 接続文字列パターン
SQL ログイン Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
マネージド ID Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
ユーザー割り当てのマネージド ID Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
既定の Azure 資格情報 Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

ヒント

接続文字列を環境変数に格納し、 @env('SQL_CONNECTION_STRING')で参照します。 運用環境のデプロイの場合は、接続文字列を Azure Key Vault に格納し、 @akv()で参照します。

サポートされていないデータ型

DAB では、次の SQL Server と Azure SQL のデータ型はサポートされていません。

データの種類 理由
geography 地理空間の種類;シリアル化はサポートされていません
geometry 平面空間型。シリアル化はサポートされていません
hierarchyid 階層データ型。シリアル化はサポートされていません
json ネイティブ JSON 型 (現在プレビュー段階)
rowversion 行のバージョン管理の種類。API 応答に含まれない
sql_variant 変数型の列。型推論はサポートされていません
vector ベクター型 (現在プレビュー段階)
xml XML 型。シリアル化はサポートされていません

Azure Cosmos DB for NoSQL

スキーマの要件

リレーショナル データベースとは異なり、Azure Cosmos DB for NoSQL はスキーマに依存しません。 DAB は、GraphQL 型を生成するために Cosmos DB コンテナーをイントロスペクトすることはできません。 ドキュメント構造を定義する GraphQL スキーマ ファイル (.gql) を指定する必要があります。

スキーマ ファイルでは、標準の GraphQL スキーマ定義言語 (SDL) と 2 つのカスタム ディレクティブが使用されます。

指令 必須 Description
@model はい GraphQL 型を DAB エンティティ名にマップします
@authorize いいえ フィールドまたは型のアクセスを特定のロールに制限します

@model ディレクティブ

@model(name: "...") ディレクティブは、DAB を介して公開するすべての GraphQL 型で必要です。 name値は、DAB 構成ファイル内のエンティティ名と正確に一致している必要があります。

type Book @model(name: "Book") {
  id: ID
  title: String
  year: Int
}

@authorize ディレクティブ

@authorize ディレクティブは、Cosmos DB GraphQL クエリのフィールド レベルおよび型レベルのアクセス制御を提供します。 フィールドまたは型にアクセスできるロールを一覧表示する roles パラメーターを受け取ります。

type Book @model(name: "Book") {
  id: ID
  title: String @authorize(roles: ["authenticated", "librarian"])
  internalNotes: String @authorize(roles: ["editor"])
}

型レベルで @authorize を適用することもできます。

type InternalReport @model(name: "InternalReport") @authorize(roles: ["auditor"]) {
  id: ID
  summary: String
}

Important

@authorize ディレクティブは、エンティティ レベルのアクセス許可に追加されます。 ディレクティブとエンティティのアクセス許可ブロックの両方で、アクセスの成功要求を許可する必要があります。 フィールドに @authorize(roles: ["editor"]) があるが、エンティティに editorのアクセス許可エントリがない場合、要求は拒否されます。

@authorize(policy: "...")はサポートされていません。 @authorize(roles: [...])のみを使用します。

完全なセットアップ ガイドについては、「 NoSQL 用 Azure Cosmos DB のデータ API ビルダーを設定する」を参照してください。

REST API を使用できない

DAB では、Azure Cosmos DB for NoSQL の REST エンドポイントは生成されません。 Azure Cosmos DB には、ドキュメント操作用の包括的なネイティブ REST API が用意されています。 GraphQL エンドポイントのみが生成されます。 Cosmos DB エンティティに対して OpenAPI ドキュメントは生成されません。

REST 経由でデータにアクセスするには、 Azure Cosmos DB REST API を 直接使用します。

Cosmos DB でサポートされていない機能

次の機能は、Azure Cosmos DB for NoSQL ではサポートされていません。

特徴 メモ
REST エンドポイント 代わりにネイティブ Cosmos DB REST API を使用する
データベース ポリシー ポリシー述語にはリレーショナル クエリ セマンティクスが必要
ストアド プロシージャ DAB エンティティとしてサポートされていません
人間関係 コンテナー間のリレーションシップはサポートされていません
並べ替え ($orderby) GraphQL クエリではサポートされていません
集約 サポートしていません
複数の変異 サポートしていません
セッション コンテキスト SQL 固有の機能

PostgreSQL

最小バージョン

PostgreSQL 11 以降が必要です。 DAB は postgreSQL ドライバーとして Npgsql を使用します。

サポートされていないデータ型

DAB では、次の PostgreSQL データ型はサポートされていません。

データの種類 メモ
bytea バイナリ文字列。シリアル化はサポートされていません
date timestampまたはtimestamptzを使用する
smalldatetime ネイティブ PostgreSQL 型ではない
datetime2 ネイティブではありません。通常は次によって処理されます。 timestamp
timestamptz タイム ゾーンを持つタイムスタンプ。サポートされていません
time 日付のない時刻
localtime システム クロックベースの時間

ストアド プロシージャ

PostgreSQL エンティティでは、ストアド プロシージャはサポートされていません。 代わりにテーブルとビューを使用してください。

MySQL

最小バージョン

MySQL 8 以降が必要です。

サポートされていないデータ型

次の MySQL データ型は DAB ではサポートされていません。

データの種類 メモ
UUID 汎用一意識別子
DATE カレンダーの日付
SMALLDATETIME 日付と時刻の保存の精度が低い
DATETIME2 ネイティブではありません。使用 datetime
DATETIMEOFFSET タイム ゾーンを含む日付と時刻
TIME 日付のない時刻
LOCALTIME システム クロックに基づく現在の時刻

ストアド プロシージャ

ストアド プロシージャは、MySQL エンティティではサポートされていません。 代わりにテーブルを使用してください。

Azure Synapse Analytics (専用 SQL プール)

サポート対象のオブジェクト

専用 SQL プールでは、SQL Server や Azure SQL と同じように、テーブル、ビュー、ストアド プロシージャがサポートされます。 サーバーレス SQL プールはサポートされていません。

サポートされていない機能

特徴 メモ
複数の変異 サポートしていません