Sumber data

Bagian menentukan data-source detail akses database. Ini juga mendefinisikan opsi database.

Pengaturan sumber data

Property Description
sumber data Objek yang berisi pengaturan konektivitas database
data-source.database-type Database yang digunakan di backend: mssql, , postgresql, mysql, cosmosdb_nosqlcosmosdb_postgresql
data-source.connection-string String koneksi untuk jenis database yang dipilih
sumber data.options Properti khusus database (misalnya, opsi untuk SQL Server, Cosmos DB, dll.)
data-source.options.database Nama Azure Cosmos DB untuk database NoSQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.container Nama kontainer Azure Cosmos DB for NoSQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.schema Jalur ke file skema GraphQL (diperlukan saat database-type = cosmosdb_nosql)
data-source.options.set-session-context Memungkinkan pengiriman klaim JSON Web Token (JWT) sebagai konteks sesi (hanya SQL Server)
data-source.health Objek yang mengonfigurasi pemeriksaan kesehatan untuk sumber data
data-source.health.enabled Mengaktifkan titik akhir pemeriksaan kesehatan
data-source.health.name Pengidentifikasi yang digunakan dalam laporan kesehatan
data-source.health.threshold-ms Durasi maksimum dalam milidetik untuk kueri pemeriksaan kesehatan
data-source.user-delegated-auth Objek yang mengonfigurasi autentikasi yang didelegasikan pengguna On-Behalf-Of (OBO) (hanya mssql)
data-source.user-delegated-auth.enabled Mengaktifkan autentikasi OBO
data-source.user-delegated-auth.provider IdP OBO (saat ini EntraId saja)
data-source.user-delegated-auth.database-audience Audiens target untuk token SQL hilir

Gambaran umum format

{
  "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>"]
}

Sumber data

Parent Property Type Required Default
$root data-source objek ✔️ Ya -

Properti berlapis

Parent Property Type Required Default
data-source database-type enum ✔️ Ya None
data-source connection-string string ✔️ Ya None
data-source options objek ❌ Tidak None

Nilai properti

database-type Description Versi Min
mssql SQL in Fabric -
mssql Azure SQL Database -
mssql Azure SQL MI -
mssql SQL Server 2016
dwsql Azure Synapse Analytics -
dwsql Gudang Kain -
dwsql Titik akhir Fabric SQL Analytics -
postgresql PostgreSQL ver. 11
mysql MySQL ver. 8
cosmosdb_nosql Azure Cosmos DB for NoSQL -
cosmosdb_postgresql Azure Cosmos DB for PostgreSQL -

Format

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

Contoh: 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

Kami menggunakan SqlClient untuk Azure SQL dan SQL Server, yang mendukung varian string koneksi ini .

Mengkonsumsi SESSION_CONTEXT

Untuk Azure SQL dan SQL Server, penyusun API Data dapat menyertakan info Klaim di 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;

Contoh: 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

"Opsi" yang ditentukan (database, container, dan schema) khusus untuk Azure Cosmos DB.

Variabel lingkungan

Gunakan variabel lingkungan untuk menyimpan rahasia teks biasa dari file konfigurasi Anda.

Tip

Penyusun API Data mendukung @env() fungsi dan .env file.

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

Ketahanan koneksi

Pembuat API Data menggunakan Backoff Eksponensial untuk mencoba kembali permintaan database setelah kesalahan sementara.

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

Identitas Layanan Terkelola (MSI)

Identitas Layanan Terkelola (MSI) didukung dengan DefaultAzureCredential yang ditentukan dalam Azure.Identity pustaka. Pelajari selengkapnya tentang Identitas terkelola di Microsoft Entra untuk Azure SQL.

User-Assigned Identitas Terkelola (UAMI)

Untuk Identitas Terkelola yang Ditetapkan Pengguna, tambahkan properti Autentikasi dan ID Pengguna ke string koneksi Anda saat menggantikan id klien Identitas Terkelola yang Ditetapkan Pengguna Anda: Authentication=Active Directory Managed Identity; User Id=<UMI_CLIENT_ID>;.

identitas terkelola System-Assigned (SAMI)

Untuk Identitas Terkelola yang Ditetapkan Sistem, tambahkan properti Autentikasi dan kecualikan argumen UserId dan Password dari string koneksi Anda: Authentication=Active Directory Managed Identity;.

Kesehatan (Sumber data)

Parent Property Type Required Default
data-source health objek No

Penyusun API Data mendukung beberapa file konfigurasi, masing-masing dengan sumber datanya sendiri. Blok konfigurasi ini memungkinkan setiap sumber data memiliki konfigurasi kesehatannya sendiri.

Properti berlapis

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

Periksa nama

Karena beberapa file konfigurasi dapat menunjuk ke sumber data dengan jenis yang sama, sumber data tersebut tidak dapat dibedakan dalam laporan kesehatan. Gunakan name untuk menetapkan label unik yang dapat diidentifikasi yang hanya digunakan dalam laporan kesehatan.

Memeriksa perilaku

Kueri paling sederhana—khusus untuk jenis database—dijalankan terhadap sumber data yang diberikan untuk memvalidasi bahwa koneksi dapat dibuka. threshold-ms Gunakan properti untuk mengonfigurasi durasi maksimum yang dapat diterima (dalam milidetik) agar kueri tersebut selesai.

Format

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

Autentikasi yang didelegasikan pengguna

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

Autentikasi yang didelegasikan pengguna on-Behalf-Of (OBO) untuk SQL Server dan Azure SQL. Saat diaktifkan, DAB menukar token pengguna masuk dengan token SQL hilir sehingga database mengautentikasi sebagai pengguna panggilan aktual. Fitur ini hanya didukung untuk mssql sumber data dan memerlukan upstream autentikasi ID Entra.

Note

Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.

Properti berlapis

Parent Property Type Required Default
data-source.user-delegated-auth enabled boolean No salah
data-source.user-delegated-auth provider enum (EntraId) No EntraId
data-source.user-delegated-auth database-audience string Ya (saat diaktifkan) None
  • enabled—mengaktifkan atau menonaktifkan OBO.
  • provider—idP untuk pertukaran token. Saat ini hanya EntraId yang didukung.
  • database-audience—audiens target untuk token SQL hilir (misalnya, https://database.windows.net).

Variabel lingkungan yang diperlukan

Ketika OBO diaktifkan, DAB membaca variabel lingkungan berikut untuk pertukaran token:

Variabel Description
DAB_OBO_CLIENTID ID aplikasi (klien) pendaftaran aplikasi ID Entra
DAB_OBO_CLIENTSECRET Rahasia klien untuk pendaftaran aplikasi
DAB_OBO_TENANTID ID penyewa Entra ID

Pengumpulan koneksi per pengguna

Ketika OBO diaktifkan, DAB mempertahankan kumpulan koneksi SQL terpisah per pengguna sehingga token akses satu pengguna tidak pernah digunakan kembali untuk permintaan pengguna lain.

Note

Pengumpulan koneksi per pengguna hanya berlaku saat autentikasi OBO aktif. Penyebaran standar tidak terpengaruh.

Format

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

Example

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

Penting

OBO hanya didukung untuk mssql. Properti database-audience diperlukan ketika OBO diaktifkan. Menjalankan konfigurasi ini terhadap sumber data non-MSSQL gagal validasi.