Veri API oluşturucusu için veritabanına özgü özellikler başvurusu

Bu başvuru, Veri API oluşturucusu (DAB) tarafından desteklenen bir veya daha fazla veritabanı platformuna özgü özellikleri, davranışları ve gereksinimleri kapsar. Veritabanları arası özellik karşılaştırma matrisi için bkz. Özellik kullanılabilirliği.

Veritabanı sürümü desteği

DAB aşağıdaki veritabanı platformlarını destekler. En düşük sürüm gereksinimleri, kendi kendine yönetilen dağıtımlar için geçerlidir. Hizmet sürümü yönettiğinden hizmet olarak platform (PaaS) veritabanlarının en düşük sürüm gereksinimi yoktur.

Veritabanı platformu Abbreviation En düşük sürüm Notlar
SQL Server SQL Ailesi 2016
Azure SQL SQL Ailesi Yok (PaaS)
Microsoft Fabric SQL SQL Ailesi Yok (PaaS)
NoSQL için Azure Cosmos DB Cosmos DB Yok (PaaS) Yalnızca GraphQL; REST uç noktası yok
PostgreSQL PGSQL 11
MySQL MySQL 8
Azure Synapse Analytics (Ayrılmış SQL havuzu) SQLDW Yok (PaaS) Sunucusuz SQL havuzu desteklenmiyor

Önemli

Hem yerel geliştirme veritabanınızın hem de dağıtılan veritabanlarının en düşük sürüm gereksinimini karşıladığını doğrulayın. DAB her iki ortamda da aynı sürücüyü kullanarak bağlanır. Her iki konumdaki eski bir sürüm çalışma zamanı hatalarının nedenidir.

SQL Server ve Azure SQL

SESSION_CONTEXT

DAB, SQL Server ve Azure SQL için her sorguyu yürütmeden önce çağırarak sp_set_session_context kimliği doğrulanmış kullanıcı taleplerini veritabanına yayabilir. Bu mekanizma, SQL yerel satır düzeyi güvenlik ilkelerinin ve saklı yordamların, çağıranın kimliğini veritabanı altyapısı içinden okumasına olanak tanır.

DAB yapılandırmasında etkinleştirildiğinde set-session-context , DAB tüm kimliği doğrulanmış talepleri anahtar-değer çiftleri olarak gönderir:

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;

Gönderilen yaygın talepler , sub, oidve kimlik sağlayıcınızın JWT'ye dahil olduğu tüm özel talepleri içerirroles.

SESSION_CONTEXT etkinleştirme

çağrılırken dab initayarla--set-session-context true:

dab init \
  --database-type mssql \
  --connection-string "@env('SQL_CONNECTION_STRING')" \
  --set-session-context true

Veya özelliğini doğrudan içinde dab-config.jsonayarlayın:

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')",
    "options": {
      "set-session-context": true
    }
  }
}

Uyarı

Etkinleştirme, set-session-context bu veri kaynağı için yanıt önbelleğe almayı devre dışı bırakır. Her istek ayrı oturum değerleri belirlediğinden, bir kullanıcının oturumundan önbelleğe alınan yanıtlar başka bir kullanıcıya sunulmamalıdır.

SQL'de SESSION_CONTEXT kullanma

etkinleştirdikten set-session-contextsonra SQL nesneleriniz talep değerlerini okuyabilir:

-- 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));

Tam bir izlenecek yol için bkz. Oturum bağlamıyla satır düzeyi güvenlik uygulama.

SESSION_CONTEXT ve bağlantı havuzu oluşturma

DAB, her isteğin başındaki tüm oturum bağlamı değerlerini sıfırlar. Ancak, set-session-context kullanıcı başına bağlantı semantiğini zorladığından, bu seçenek etkinleştirildiğinde kullanıcılar arasında bağlantının yeniden kullanılması otomatik olarak önlenir.

Bağlantı dizesi değişkenleri

DAB, SQL Server ve Azure SQL için kullanır Microsoft.Data.SqlClient . Kitaplık bu bağlantı dizesi biçimlerini destekler.

Yaygın biçimler:

Kimlik doğrulama yöntemi Bağlantı dizesi deseni
SQL oturum açma Server=tcp:<server>.database.windows.net;Database=<db>;User ID=<user>;Password=<pwd>;
İdare edilen kimlik Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;
Kullanıcı Atamalı Yönetilen Kimlik Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Managed Identity;User ID=<client-id>;
Varsayılan Azure kimlik bilgileri Server=tcp:<server>.database.windows.net;Database=<db>;Authentication=Active Directory Default;

Tavsiye

Bağlantı dizelerini ortam değişkenlerinde depolayın ve ile @env('SQL_CONNECTION_STRING')bunlara başvurun. Üretim dağıtımları için bağlantı dizesini Azure Key Vault'ta depolayın ve ile buna @akv()başvurun.

Desteklenmeyen veri türleri

Aşağıdaki SQL Server ve Azure SQL veri türleri DAB tarafından desteklenmez:

Veri türü Nedeni
geography Jeo-uzamsal tür; serileştirme desteklenmiyor
geometry Planar uzamsal tip; serileştirme desteklenmiyor
hierarchyid Hiyerarşik veri türü; serileştirme desteklenmiyor
json Yerel JSON türü (şu anda önizlemede)
rowversion Satır sürüm oluşturma türü; API yanıtlarına dahil değil
sql_variant Değişken türündeki sütunlar; tür çıkarımı desteklenmiyor
vector Vektör türü (şu anda önizlemede)
xml XML türü; serileştirme desteklenmiyor

NoSQL için Azure Cosmos DB

Şema gereksinimi

İlişkisel veritabanlarının aksine, NoSQL için Azure Cosmos DB şemadan bağımsızdır. DAB, GraphQL türleri oluşturmak için Cosmos DB kapsayıcısına giriş yapamaz. Belge yapınızı tanımlayan bir GraphQL şema dosyası (.gql) sağlamanız gerekir.

Şema dosyası, iki özel yönergeyle standart GraphQL Şema Tanım Dili 'ni (SDL) kullanır:

Yönerge Zorunlu Description
@model Evet GraphQL türünü DAB varlık adıyla eşler
@authorize Hayır Alan veya tür erişimini belirli rollerle kısıtlar

@model Talimat

yönergesi @model(name: "...") , DAB aracılığıyla kullanıma açtığınız her GraphQL türünde gereklidir. Değerin name DAB yapılandırma dosyanızdaki varlık adıyla tam olarak eşleşmesi gerekir.

type Book @model(name: "Book") {
  id: ID
  title: String
  year: Int
}

@authorize Talimat

yönergesi @authorize Cosmos DB GraphQL sorguları için alan düzeyinde ve tür düzeyinde erişim denetimi sağlar. Alana veya türe erişebilecek rolleri listeleyen bir roles parametre kabul eder.

type Book @model(name: "Book") {
  id: ID
  title: String @authorize(roles: ["authenticated", "librarian"])
  internalNotes: String @authorize(roles: ["editor"])
}

Ayrıca tür düzeyinde de uygulayabilirsiniz @authorize :

type InternalReport @model(name: "InternalReport") @authorize(roles: ["auditor"]) {
  id: ID
  summary: String
}

Önemli

yönergesi @authorize varlık düzeyi izinlerine ekler . Hem yönergesi hem de varlığın izin bloğu, erişim isteğinin başarılı olması için izin vermelidir. Bir alan varsa @authorize(roles: ["editor"]) ancak varlığın için editorizin girdisi yoksa istek reddedilir.

Uyarı

@authorize(policy: "...") desteklenmez. Yalnızca kullanın @authorize(roles: [...]) .

Tam kurulum kılavuzu için bkz. NoSQL için Azure Cosmos DB için Veri API oluşturucusu ayarlama.

REST API kullanılamıyor

DAB, NoSQL için Azure Cosmos DB için REST uç noktaları oluşturmaz. Azure Cosmos DB, belge işlemleri için kapsamlı bir yerel REST API sağlar. Yalnızca GraphQL uç noktaları oluşturulur. Cosmos DB varlıkları için OpenAPI belgeleri oluşturulmaz.

REST üzerinden verilere erişmek için Azure Cosmos DB REST API'sini doğrudan kullanın.

Cosmos DB için desteklenmeyen özellikler

Aşağıdaki özellikler NoSQL için Azure Cosmos DB için desteklenmez:

Özellik Notlar
REST uç noktaları Bunun yerine yerel Cosmos DB REST API'sini kullanın
Veritabanı ilkeleri İlke koşullarında ilişkisel sorgu semantiği gerekir
Saklanan prosedürler DAB varlıkları olarak desteklenmez
İlişkiler Kapsayıcılar arası ilişkiler desteklenmez
Sıralama ($orderby) GraphQL sorgularında desteklenmez
Aggregation Desteklenmiyor
Çoklu mutasyonlar Desteklenmiyor
Oturum bağlamı SQL'e özgü özellik

PostgreSQL

En düşük sürüm

PostgreSQL 11 veya üzeri gereklidir. DAB, PostgreSQL sürücüsü olarak kullanır Npgsql .

Desteklenmeyen veri türleri

Aşağıdaki PostgreSQL veri türleri DAB tarafından desteklenmez:

Veri türü Notlar
bytea İkili dize; serileştirme desteklenmiyor
date Kullan timestamp veya timestamptz
smalldatetime Yerel bir PostgreSQL türü değil
datetime2 Yerel değil; genellikle tarafından işlenir timestamp
timestamptz Saat dilimi ile zaman damgası; desteklenmiyor
time Tarihsiz günün saati
localtime Sistem saati tabanlı saat

Saklanan prosedürler

Saklı yordamlar PostgreSQL varlıkları için desteklenmez. Bunun yerine tabloları ve görünümleri kullanın.

MySQL

En düşük sürüm

MySQL 8 veya üzeri gereklidir.

Desteklenmeyen veri türleri

Aşağıdaki MySQL veri türleri DAB tarafından desteklenmez:

Veri türü Notlar
UUID Evrensel Olarak Benzersiz Tanımlayıcılar
DATE Takvim tarihleri
SMALLDATETIME Daha az kesin tarih ve saat depolama
DATETIME2 Yerel değil; Kullanın datetime
DATETIMEOFFSET Saat dilimi olan tarihler ve saatler
TIME Tarihsiz günün saati
LOCALTIME Sistem saatini temel alan geçerli saat

Saklanan prosedürler

Saklı yordamlar MySQL varlıkları için desteklenmez. Bunun yerine tabloları kullanın.

Azure Synapse Analytics (Ayrılmış SQL havuzu)

Desteklenen nesneler

Ayrılmış SQL havuzu, SQL Server ve Azure SQL ile aynı şekilde tabloları, görünümleri ve saklı yordamları destekler. Sunucusuz SQL havuzu desteklenmez.

Desteklenmeyen özellikler

Özellik Notlar
Çoklu mutasyonlar Desteklenmiyor