データ 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-context
dab 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
、ロールmetadataviewer
と authenticated
をtitle
持つユーザーのみにフィールドへのアクセスを制限します。 認証されたリクエスタの場合、システム ロール 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 でのデータ モデリング」を参照してください。