다음을 통해 공유


데이터 원본

이 섹션에서는 data-source 데이터베이스 액세스 세부 정보를 정의합니다. 또한 데이터베이스 옵션을 정의합니다.

데이터 원본 설정

Property Description
데이터 원본 데이터베이스 연결 설정을 포함하는 개체
data-source.database-type 백 엔드에 사용되는 데이터베이스: mssql, postgresql, mysql, cosmosdb_nosqlcosmosdb_postgresql
data-source.connection-string 선택한 데이터베이스 형식에 대한 연결 문자열
data-source.options 데이터베이스별 속성(예: SQL Server, Cosmos DB 등의 옵션)
data-source.options.database NoSQL용 Azure Cosmos DB 데이터베이스의 이름(필요한 경우 database-type = cosmosdb_nosql)
data-source.options.container NoSQL 컨테이너용 Azure Cosmos DB의 이름(필요한 경우 database-type = cosmosdb_nosql)
data-source.options.schema GraphQL 스키마 파일의 경로(필요한 경우 database-type = cosmosdb_nosql)
data-source.options.set-session-context JWT(JSON Web Token) 클레임을 세션 컨텍스트로 보낼 수 있습니다(SQL Server에만 해당)
data-source.health 데이터 원본에 대한 상태 검사 구성 개체
data-source.health.enabled 상태 검사 엔드포인트를 사용하도록 설정
data-source.health.name 상태 보고서에 사용되는 식별자
data-source.health.threshold-ms 상태 검사 쿼리의 최대 기간(밀리초)
data-source.user-delegated-auth OBO(On-Behalf-Of) 사용자 위임 인증을 구성하는 개체(mssql만 해당)
data-source.user-delegated-auth.enabled OBO 인증 사용
data-source.user-delegated-auth.provider OBO ID 공급자(현재 EntraId 만 해당)
data-source.user-delegated-auth.database-audience 다운스트림 SQL 토큰의 대상 그룹

형식 개요

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      // mssql only
      "set-session-context": <true> (default) | <false>,
      // cosmosdb_nosql only
      "database": <string>,
      "container": <string>,
      "schema": <string>
    },
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    },
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  },
  "data-source-files": ["<string>"]
}

데이터 원본

Parent Property Type Required Default
$root data-source object ✔️ 예 -

중첩 속성

Parent Property Type Required Default
data-source database-type enum ✔️ 예 None
data-source connection-string string ✔️ 예 None
data-source options object ❌ 아니요 None

속성 값

database-type Description 최소 버전
mssql 패브릭의 SQL -
mssql Azure SQL 데이터베이스 -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql 직물 창고 -
dwsql 패브릭 SQL 분석 엔드포인트 -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql NoSQL용 Azure Cosmos DB -
cosmosdb_postgresql Azure Cosmos DB for PostgreSQL (아주르 코스모스 DB 포스트그레SQL용) -

Format

{
  "data-source": {
    "database-type": <string>,
    "connection-string": <string>,
    "options": {
      "<key-name>": <string>
    }
  }
}

예: Azure SQL 및 SQL Server

"data-source": {
  "database-type": "mssql",
  "connection-string": "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=MyDatabase;User ID=MyUser;Password=MyPassword;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
    "options": {
      "set-session-context": true
    }
}

Note

이러한 연결 문자열 변형을 지원하는 Azure SQL 및 SQL Server에 사용합니다SqlClient.

소모 SESSION_CONTEXT

Azure SQL 및 SQL Server의 경우 데이터 API 작성기에서 SQL의 SESSION_CONTEXT클레임 정보를 포함할 수 있습니다.

CREATE PROC GetUser @userId INT AS
BEGIN
    -- Use claims
    IF SESSION_CONTEXT(N'user_role') = 'admin' 
    BEGIN
        RAISERROR('Unauthorized access', 16, 1);
    END

    SELECT Id, Name, Age, IsAdmin
    FROM Users
    WHERE Id = @userId;
END;

예: Azure Cosmos DB

"data-source": {
  "database-type": "cosmosdb_nosql",
  "connection-string": "@env('SQL_CONNECTION_STRING')",
  "options": {
    "database": "Your_CosmosDB_Database_Name",
    "container": "Your_CosmosDB_Container_Name",
    "schema": "Path_to_Your_GraphQL_Schema_File"
  }
}

Note

지정된 "옵션"(databasecontainerschema)은 Azure Cosmos DB와 관련이 있습니다.

환경 변수

환경 변수를 사용하여 구성 파일에서 일반 텍스트 비밀을 유지합니다.

Tip

데이터 API 작성기에서는 함수와 .env 파일을 모두 @env() 지원합니다.

"data-source": {
  "database-type": "mssql",
  "connection-string": "@env('SQL_CONNECTION_STRING')"
}

연결 복원력

데이터 API 작성기에서는 지수 백오프를 사용하여 일시적인 오류 후 데이터베이스 요청을 다시 시도합니다.

Attempts First Second Third Fourth Fifth
Seconds 2s 4s 8s 16s 32s

MSI(관리 서비스 ID)

MSI(관리 서비스 ID)는 라이브러리에 DefaultAzureCredential 정의된 상태로 Azure.Identity 지원됩니다. Azure SQL용 Microsoft Entra의 관리 ID에 대해 자세히 알아봅니다.

UAMI(관리 ID) User-Assigned

사용자 할당 관리 ID의 경우 사용자 할당 관리 ID의 클라이언트 ID로 대체하면서 연결 문자열에 인증 및 사용자 ID Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;속성을 추가합니다.

System-Assigned 관리 ID(SAMI)

시스템 할당 관리 ID의 경우 인증 속성을 추가하고 연결 문자열Authentication=Active Directory Managed Identity;에서 UserId암호 인수를 제외합니다.

상태(데이터 원본)

Parent Property Type Required Default
data-source health object No

데이터 API 작성기에서는 각각 자체 데이터 원본이 있는 여러 구성 파일을 지원합니다. 이 구성 블록을 사용하면 각 데이터 원본이 자체 상태 구성을 가질 수 있습니다.

중첩 속성

Parent Property Type Required Default
data-source.health enabled boolean No true
data-source.health name string No database-type
data-source.health threshold-ms integer No 1000

이름 확인

여러 구성 파일이 동일한 형식의 데이터 원본을 가리킬 수 있으므로 상태 보고서에서 해당 데이터 원본을 구분할 수 없습니다. 상태 보고서에만 사용되는 고유하고 식별 가능한 레이블을 할당하는 데 사용합니다 name .

동작 확인

데이터베이스 유형과 관련된 가장 간단한 쿼리는 지정된 데이터 원본에 대해 실행되어 연결을 열 수 있는지 확인합니다. 이 threshold-ms 속성을 사용하여 해당 쿼리가 완료될 최대 허용 기간(밀리초)을 구성합니다.

Format

{
  "data-source": {
    "health": {
      "enabled": <true> (default) | <false>,
      "name": <string>,
      "threshold-ms": <integer; default: 1000>
    }
  }
}

사용자 위임 인증

Parent Property Type Required Default
data-source user-delegated-auth object No

SQL Server 및 Azure SQL에 대한 OBO(On-Behalf-Of) 사용자 위임 인증입니다. 사용하도록 설정하면 DAB는 들어오는 사용자 토큰을 다운스트림 SQL 토큰으로 교환하므로 데이터베이스가 실제 호출 사용자로 인증됩니다. 이 기능은 데이터 원본에 mssql 대해서만 지원되며 Entra ID 인증 업스트림이 필요합니다.

Note

이 섹션에 설명된 Data API Builder 2.0 기능은 현재 미리 보기 상태이며 일반 공급 전에 변경될 수 있습니다. 자세한 내용은 버전 2.0의 새로운 기능입니다.

중첩 속성

Parent Property Type Required Default
data-source.user-delegated-auth enabled boolean No false
data-source.user-delegated-auth provider enum(EntraId) No EntraId
data-source.user-delegated-auth database-audience string 예(사용하도록 설정된 경우) None
  • enabled- OBO를 켜거나 끕니다.
  • provider- 토큰 교환에 대한 ID 공급자입니다. 현재는 EntraId만 지원됩니다.
  • database-audience- 다운스트림 SQL 토큰의 대상 대상 그룹(예: https://database.windows.net)입니다.

필수 환경 변수

OBO를 사용하도록 설정하면 DAB는 토큰 교환에 대해 다음 환경 변수를 읽습니다.

변수 Description
DAB_OBO_CLIENTID Entra ID 앱 등록의 애플리케이션(클라이언트) ID
DAB_OBO_CLIENTSECRET 앱 등록에 대한 클라이언트 암호
DAB_OBO_TENANTID Entra ID 테넌트 ID

사용자별 연결 풀링

OBO를 사용하도록 설정하면 DAB는 사용자당 별도의 SQL 연결 풀을 유지 관리하므로 한 사용자의 액세스 토큰이 다른 사용자의 요청에 다시 사용되지 않습니다.

Note

사용자별 연결 풀링이 OBO 인증이 활성화된 경우에만 적용됩니다. 표준 배포는 영향을 받지 않습니다.

Format

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": <true> | <false> (default),
      "provider": <string>,
      "database-audience": <string>
    }
  }
}

예시

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "user-delegated-auth": {
      "enabled": true,
      "provider": "EntraId",
      "database-audience": "https://database.windows.net"
    }
  }
}

중요합니다

OBO는 .에 mssql대해서만 지원됩니다. OBO database-audience 를 사용하는 경우 속성이 필요합니다. MSSQL이 아닌 데이터 원본에 대해 이 구성을 실행하면 유효성 검사가 실패합니다.