이 참조에서는 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 |
|---|---|
| 여러 돌연변이 | 지원되지 않음 |