このリファレンスでは、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;
送信される一般的な要求には、 roles、 sub、 oid、および 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 プールはサポートされていません。
サポートされていない機能
| 特徴 | メモ |
|---|---|
| 複数の変異 | サポートしていません |