次の方法で共有


データ API ビルダーのデータベース固有の機能

データ API ビルダーを使用すると、各データベースに固有の機能を持つことができます。 この記事では、各データベースでサポートされる機能について詳しく説明します。

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

多くの従来のデータベースでは、Data API Builder (DAB) と互換性のある最小バージョンが必要です。

サポートを受けられる最低限のバージョン
SQL Server 2016
MySQL 8
PostgreSQL 11

逆に、Azure クラウド データベース サービスは、特定のバージョンを必要とせずに、すぐに使用できます。

サポートを受けられる最低限のバージョン
Azure SQL 該当なし
NoSQL 用 Azure Cosmos DB 該当なし
PostgreSQL 用 Azure Cosmos DB 該当なし

Azure SQL と SQL Server

Azure SQLとSQL Serverの両方を含む、SQL に固有のプロパティがいくつかあります。

SESSION_CONTEXT

Azure SQLとSQL Serverでは、 関数を使用して現在のSESSION_CONTEXTユーザーの ID にアクセスできます。 この機能は、Azure SQLおよびSQL Serverで使用できる行レベル セキュリティ (RLS) のネイティブ サポートを適用する場合に便利です。

Azure SQLとSQL Serverの場合、Data API ビルダーは を利用して、ユーザー指定のSESSION_CONTEXTメタデータを基になるデータベースに送信できます。 このようなメタデータは、アクセス トークンに存在するクレームにより、Data API ビルダーで使用できます。 その後、データベースに送信されるデータを使用して、SELECT、UPDATE、DELETE などの操作のデータへのアクセスをさらに防止するために、セキュリティ ポリシーを構成するなど、追加のレベルのセキュリティを構成できます。 データは SESSION_CONTEXT 、その接続が閉じられるまで、データベース接続中にデータベースで使用できます。 ストアド プロシージャ内でも同じデータを使用できます。

データの設定SESSION_CONTEXTの詳細については、「(Transact-SQL)」を参照してくださいsp_set_session_context

構成 SESSION_CONTEXT ファイルの options セクションの プロパティを data-source 使用して構成します。 詳細については、「構成リファレンス」を参照してくださいdata-source

{
  ...
  "data-source": {
    "database-type": "mssql",
    "options": {
      "set-session-context": true
    },
    "connection-string": "<connection-string>"
  },
  ...
}

または、 コマンドで 引数を--set-session-contextdab init使用します。

dab init --database-type mssql --set-session-context true

EasyAuth/JWT トークンに存在するすべての要求は、 を介して SESSION_CONTEXT 基になるデータベースに送信されます。 トークンに存在するすべての要求は、クエリを介して渡されるキーと値のペアに SESSION_CONTEXT 変換されます。 これらの要求には次のものが含まれますが、これらに限定されません。

説明
aud 対象ユーザー
iss 発行者
iat 発行時刻
exp 期限切れ日時
azp アプリケーション識別子
azpacr クライアントの認証方法
name サブジェクト
uti 一意のトークン識別子

要求の詳細については、「アクセス トークン要求のリファレンスMicrosoft Entra ID」を参照してください

これらの要求は SQL クエリに変換されます。 この切り捨てられた例は、このコンテキストでの使用方法 sp_set_session_context を示しています。

EXEC sp_set_session_context 'aud', '<AudienceID>', @read_only = 1;
EXEC sp_set_session_context 'iss', 'https://login.microsoftonline.com/<TenantID>/v2.0', @read_only = 1;
EXEC sp_set_session_context 'iat', '1637043209', @read_only = 1;
...
EXEC sp_set_session_context 'azp', 'a903e2e6-fd13-4502-8cae-9e09f86b7a6c', @read_only = 1;
EXEC sp_set_session_context 'azpacr', 1, @read_only = 1;
..
EXEC sp_set_session_context 'uti', '_sSP3AwBY0SucuqqJyjEAA', @read_only = 1;
EXEC sp_set_session_context 'ver', '2.0', @read_only = 1;

その後、セッション データを使用して行レベル セキュリティ (RLS) を実装できます。 詳細については、「セッション コンテキストを使用して行レベルのセキュリティを実装する」を参照してください。

Azure Cosmos DB

Azure Cosmos DB のさまざまな API に固有のプロパティがいくつかあります。

NoSQL 用 API のスキーマ

Azure Cosmos DB for NoSQL はスキーマに依存しません。 NoSQL 用 API でデータ API ビルダーを使用するには、コンテナーのデータ モデルを表すオブジェクト型定義を含むGraphQL スキーマ ファイルを作成する必要があります。 データ API ビルダーでは、より制限の厳しい読み取りアクセスanonymousを適用する場合に、GraphQLオブジェクト型の定義とフィールドに GraphQL スキーマ ディレクティブauthorizeが含まれることも想定しています。

たとえば、このスキーマ ファイルはコンテナー内の Book 項目を表します。 この項目には、少なくとも title プロパティと プロパティが Authors 含まれています。

type Book @model(name:"Book"){
  id: ID
  title: String @authorize(roles:["metadataviewer","authenticated"])
  Authors: [Author]
}

このスキーマ例は、DAB 構成ファイルの次のエンティティ構成に対応しています。 詳細については、「構成リファレンス」を参照してくださいentities

{
  ...
  "Book": {
    "source": "Book",
    "permissions": [
      {
        "role": "anonymous",
        "actions": [ "read" ]
      },
      {
        "role": "metadataviewer",
        "actions": [ "read" ]
      }
    ]
  }
  ...
}

を持つ roles:["metadataviewer","authenticated"] ディレクティブは@authorize、ロールmetadataviewerauthenticatedtitle持つユーザーのみにフィールドへのアクセスを制限します。 認証されたリクエスタの場合、システム ロール authenticated が自動的に割り当てられるため、ヘッダーは X-MS-API-ROLE 不要になります。

認証された要求を の metadataviewerコンテキストで実行する必要がある場合は、 型 X-MS-API-ROLE が に metadataviewer設定された要求ヘッダーを伴う必要があります。 ただし、匿名アクセスが必要な場合は、承認されたディレクティブを省略する必要があります。

ディレクティブは@model、このGraphQLオブジェクト型とランタイム構成内の対応するエンティティ名との間に相関関係を確立するために使用されます。ディレクティブの形式は次のとおりです。@model(name:"<Entity_Name>")

より深い例として、 ディレクティブは @authorize 最上位レベルの型定義で適用できます。 このアプリケーションは、型とそのフィールドへのアクセスを、 ディレクティブ内で指定されたロールのみに制限します。

type Series @model(name:"Series") @authorize(roles:["editor","authenticated"]) {
  id: ID
  title: String
  Books: [Book]
}
{
  "Book": {
    "source": "Series",
    "permissions": [
      {
        "role": "authenticated",
        "actions": [ "read" ]
      },
      {
        "role": "editor",
        "actions": [ "*" ]
      }
    ]
  }
}

NoSQL 用 API でのコンテナー間クエリ

コンテナー間のGraphQL操作はサポートされていません。 エンジンは、次を示すエラー メッセージで応答します。 Adding/updating Relationships is currently not supported in Azure Cosmos DB for NoSQL.

この制限を回避するには、埋め込み形式で同じコンテナー内にエンティティを格納するようにデータ モデルを更新します。 詳細については、「 Azure Cosmos DB for NoSQL でのデータ モデリング」を参照してください。