다음을 통해 공유


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

이 참조에서는 DAB(Data API Builder)에서 지원하는 하나 이상의 데이터베이스 플랫폼과 관련된 기능, 동작 및 요구 사항을 다룹니다. 데이터베이스 간 기능 비교 매트릭스는 기능 가용성을 참조하세요.

데이터베이스 버전 지원

DAB는 다음 데이터베이스 플랫폼을 지원합니다. 최소 버전 요구 사항은 자체 관리형 배포에 적용됩니다. PaaS(Platform-as-a-Service) 데이터베이스에는 서비스가 버전을 관리하므로 최소 버전 요구 사항이 없습니다.

데이터베이스 플랫폼 Abbreviation 최소 버전 Notes
SQL Server SQL 제품군 2016
Azure SQL SQL 제품군 N/A(PaaS)
Microsoft Fabric SQL SQL 제품군 N/A(PaaS)
NoSQL를 위한 Azure Cosmos DB Cosmos DB N/A(PaaS) GraphQL만 해당; REST 엔드포인트 없음
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics(전용 SQL 풀) SQLDW N/A(PaaS) 서버리스 SQL 풀은 지원되지 않습니다.

중요합니다

로컬 개발 데이터베이스와 배포된 데이터베이스가 모두 최소 버전 요구 사항을 충족하는지 확인합니다. 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;

전송된 일반적인 클레임에는 ID 공급자가 JWT에 포함하는 모든 사용자 지정 클레임이 포함rolessuboid됩니다.

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
    }
  }
}

경고

사용하도록 설정하면 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>;
관리형 아이덴티티 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()

지원되지 않는 데이터 형식

다음 SQL Server 및 Azure SQL 데이터 형식은 DAB에서 지원되지 않습니다.

데이터 형식 Reason
geography 지리 공간적 형식; serialization이 지원되지 않음
geometry 평면 공간 유형; serialization이 지원되지 않음
hierarchyid 계층적 데이터 형식; serialization이 지원되지 않음
json 네이티브 JSON 형식(현재 미리 보기 상태)
rowversion 행 버전 관리 유형; API 응답에 포함되지 않음
sql_variant 가변 형식 열; 형식 유추가 지원되지 않음
vector 벡터 형식(현재 미리 보기 상태)
xml XML 형식; serialization이 지원되지 않음

NoSQL를 위한 Azure Cosmos DB

스키마 요구 사항

관계형 데이터베이스와 달리 NoSQL용 Azure Cosmos DB는 스키마에 구애받지 않습니다. DAB는 Cosmos DB 컨테이너를 검색하여 GraphQL 형식을 생성할 수 없습니다. 문서 구조를 정의하는 GraphQL 스키마 파일(.gql)을 제공해야 합니다.

스키마 파일은 다음 두 개의 사용자 지정 지시문과 함께 표준 GraphQL SDL(스키마 정의 언어)을 사용합니다.

지시 필수 Description
@model GraphQL 형식을 DAB 엔터티 이름에 매핑
@authorize No 특정 역할에 대한 필드 또는 형식 액세스를 제한합니다.

@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
}

중요합니다

지시문은 @authorize 엔터티 수준 권한에 추가 됩니다. 지시문과 엔터티의 권한 블록 모두 액세스 요청이 성공하도록 허용해야 합니다. 필드에 @authorize(roles: ["editor"]) 엔터티에 대한 editor사용 권한 항목이 없는 경우 요청이 거부됩니다.

메모

@authorize(policy: "...")는 지원되지 않습니다. 사용 @authorize(roles: [...]) 전용입니다.

전체 설정 가이드는 Azure Cosmos DB for NoSQL에 대한 데이터 API 작성기 설정을 참조하세요.

REST API 사용 불가

DAB는 NoSQL용 Azure Cosmos DB에 대한 REST 엔드포인트를 생성하지 않습니다. Azure Cosmos DB는 문서 작업을 위한 포괄적인 네이티브 REST API를 제공합니다. GraphQL 엔드포인트만 생성됩니다. OpenAPI 문서는 Cosmos DB 엔터티에 대해 생성되지 않습니다.

REST를 통해 데이터에 액세스하려면 Azure Cosmos DB REST API 를 직접 사용합니다.

Cosmos DB에 지원되지 않는 기능

NoSQL용 Azure Cosmos DB에는 다음 기능이 지원되지 않습니다.

특징 Notes
REST 엔드포인트 대신 네이티브 Cosmos DB REST API 사용
데이터베이스 정책 정책 조건자는 관계형 쿼리 의미 체계가 필요합니다.
저장된 프로시저 DAB 엔터티로 지원되지 않음
관계 컨테이너 간 관계는 지원되지 않습니다.
정렬($orderby) GraphQL 쿼리에서 지원되지 않음
Aggregation 지원되지 않음
여러 돌연변이 지원되지 않음
세션 컨텍스트 SQL 관련 기능

PostgreSQL

최소 버전

PostgreSQL 11 이상이 필요합니다. DAB는 PostgreSQL 드라이버로 사용합니다 Npgsql .

지원되지 않는 데이터 형식

다음 PostgreSQL 데이터 형식은 DAB에서 지원되지 않습니다.

데이터 형식 Notes
bytea 이진 문자열; serialization이 지원되지 않음
date timestamp 또는 timestamptz를 사용하십시오.
smalldatetime 네이티브 PostgreSQL 형식이 아님
datetime2 네이티브가 아닙니다. 일반적으로 다음에서 처리합니다. timestamp
timestamptz 표준 시간대가 있는 타임스탬프; 지원되지 않음
time 날짜가 없는 하루 중 시간
localtime 시스템 시계 기반 시간

저장된 프로시저

PostgreSQL 엔터티에는 저장 프로시저가 지원되지 않습니다. 대신 테이블 및 뷰를 사용합니다.

MySQL

최소 버전

MySQL 8 이상이 필요합니다.

지원되지 않는 데이터 형식

다음 MySQL 데이터 형식은 DAB에서 지원되지 않습니다.

데이터 형식 Notes
UUID 범용 고유 식별자
DATE 일정 날짜
SMALLDATETIME 덜 정확한 날짜 및 시간 스토리지
DATETIME2 네이티브가 아닙니다. 사용 datetime
DATETIMEOFFSET 표준 시간대가 있는 날짜 및 시간
TIME 날짜가 없는 하루 중 시간
LOCALTIME 시스템 클록 기반의 현재 시간

저장된 프로시저

MySQL 엔터티에는 저장 프로시저가 지원되지 않습니다. 대신 테이블을 사용합니다.

Azure Synapse Analytics(전용 SQL 풀)

지원되는 개체

전용 SQL 풀은 SQL Server 및 Azure SQL과 동일한 테이블, 뷰 및 저장 프로시저를 지원합니다. 서버리스 SQL 풀은 지원되지 않습니다.

지원되지 않는 기능

특징 Notes
여러 돌연변이 지원되지 않음