다음을 통해 공유


데이터 API 작성기를 위한 데이터베이스별 기능

데이터 API 작성기를 사용하면 각 데이터베이스에 고유한 특정 기능이 있습니다. 이 문서에서는 각 데이터베이스에 대해 지원되는 기능에 대해 자세히 설명합니다.

데이터베이스 버전 지원

대부분의 기존 데이터베이스에는 최소 버전이 DAB(Data API Builder)와 호환되어야 합니다.

지원되는 최소 버전
SQL Server 2016
MySQL 8
PostgreSQL 11

반대로 Azure 클라우드 데이터베이스 서비스는 특정 버전을 요구하지 않고 기본적으로 DAB에서 작동합니다.

지원되는 최소 버전
Azure SQL n/a
NoSQL용 Azure Cosmos DB n/a
PostgreSQL용 Azure Cosmos DB n/a

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의 경우 데이터 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 전달되는 키-값 쌍으로 변환됩니다. 이러한 클레임에는 다음이 포함되지만 이에 국한되지는 않습니다.

Description
aud Audience
iss Issuer
iat Issued at
exp Expiration time
azp Application identifier
azpacr 클라이언트의 인증 방법
name Subject
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 (애저 코스모스 DB)

Azure Cosmos DB의 다양한 API에 고유한 몇 가지 특정 속성이 있습니다.

NoSQL용 API의 스키마

Azure Cosmos DB for NoSQL는 스키마에 구애받지 않습니다. NoSQL용 API와 함께 데이터 API 작성기를 사용하려면 컨테이너의 데이터 모델을 나타내는 개체 형식 정의를 포함하는 GraphQL 스키마 파일을 만들어야 합니다. 또한 데이터 API 작성기에서는 보다 authorize제한적인 읽기 액세스를 적용하려는 경우 GraphQL 개체 형식 정의 및 필드에 GraphQL 스키마 지시문 anonymous 이 포함될 것으로 예상합니다.

예를 들어 이 스키마 파일은 컨테이너 내의 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" ]
      }
    ]
  }
  ...
}

이 지시문 @authorizeroles:["metadataviewer","authenticated"] 역할에 title 대한 사용자로만 필드에 대한 액세스를 metadataviewer 제한합니다authenticated. 인증된 요청자의 경우 시스템 역할이 authenticated 자동으로 할당되므로 헤더가 필요하지 X-MS-API-ROLE 않습니다.

인증된 요청을 컨텍스트에서 실행해야 하는 경우 형식 metadataviewerX-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.

포함된 형식으로 동일한 컨테이너 내에 엔터티를 저장하도록 데이터 모델을 업데이트하여 이 제한을 해결할 수 있습니다. 자세한 내용은 NoSQL용 Azure Cosmos DB의 데이터 모델링을 참조하세요.