Aracılığıyla paylaş


Veri API'sini oluşturucu için veritabanına özgü özellikler

Veri API oluşturucusu, her veritabanının kendi özel özelliklerine sahip olmasını sağlar. Bu makalede, her veritabanı için desteklenen özellikler ayrıntılı olarak anlatılır.

Veritabanı sürümü desteği

Birçok geleneksel veritabanı, Veri API'si oluşturucusu (DAB) ile uyumlu olması için en düşük sürümü gerektirir.

Desteklenen En Düşük Sürüm
SQL Server 2016
MySQL 8
PostgreSQL 11

Buna karşılık, Azure bulut veritabanı hizmetleri belirli bir sürüme gerek kalmadan DAB ile çalışır.

Desteklenen En Düşük Sürüm
Azure SQL yok
NoSQL için Azure Cosmos DB yok
PostgreSQL için Azure Cosmos DB yok

Azure SQL ve SQL Server

Hem Azure SQL hem de SQL Server dahil olmak üzere SQL'e özgü birkaç özel özellik vardır.

SESSION_CONTEXT

Azure SQL ve SQL Server işlevin SESSION_CONTEXT geçerli kullanıcının kimliğine erişmek için kullanılmasını destekler. Bu özellik, Azure SQL ve SQL Server kullanılabilir satır düzeyi güvenlik (RLS) için yerel desteği uygulamak istediğinizde kullanışlıdır.

veri API oluşturucusu, Azure SQL ve SQL Server için kullanıcı tarafından belirtilen meta verileri temel alınan veritabanına göndermek için avantajından SESSION_CONTEXT yararlanabilir. Bu tür meta veriler, erişim belirtecinde bulunan talepler nedeniyle Data API oluşturucusunda kullanılabilir. Veritabanına gönderilen veriler daha sonra SELECT, UPDATE, DELETE gibi işlemlerdeki verilere erişimi daha fazla engellemek için ek bir güvenlik düzeyi (örneğin, Güvenlik ilkelerini yapılandırarak) yapılandırmak için kullanılabilir. Veriler SESSION_CONTEXT , bu bağlantı kapatılana kadar veritabanı bağlantısı sırasında veritabanı tarafından kullanılabilir. Aynı veriler saklı yordam içinde de kullanılabilir.

Verileri ayarlama SESSION_CONTEXT hakkında daha fazla bilgi için bkz sp_set_session_context . (Transact-SQL).

Yapılandırma dosyasındaki optionsdata-source bölümünün özelliğini kullanarak yapılandırınSESSION_CONTEXT. Daha fazla bilgi için bkz data-source . yapılandırma başvurusu.

{
  ...
  "data-source": {
    "database-type": "mssql",
    "options": {
      "set-session-context": true
    },
    "connection-string": "<connection-string>"
  },
  ...
}

Alternatif olarak, komutuyla bağımsız değişkenini dab init kullanın--set-session-context.

dab init --database-type mssql --set-session-context true

EasyAuth/JWT belirtecinde bulunan tüm talepler, temel alınan veritabanına aracılığıyla SESSION_CONTEXT gönderilir. Belirteçte bulunan tüm talepler sorgu aracılığıyla SESSION_CONTEXT geçirilen anahtar-değer çiftlerine çevrilir. Bu talepler şunlardır ancak bunlarla sınırlı değildir:

Description
aud Hedef kitle
iss Veren
iat Verilen yer:
exp Süre sonu
azp Uygulama tanımlayıcısı
azpacr İstemcinin kimlik doğrulama yöntemi
name Konu
uti Benzersiz belirteç tanımlayıcısı

Talepler hakkında daha fazla bilgi için bkz. erişim belirteci talep başvurusu Microsoft Entra ID.

Bu talepler bir SQL sorgusuna çevrilir. Bu kesilmiş örnek, bu bağlamda nasıl sp_set_session_context kullanıldığını gösterir:

EXEC sp_set_session_context 'aud', '<AudienceID>', @read_only = 1;
EXEC sp_set_session_context 'iss', 'https://login.microsoftonline.com/<TenantID>/v2.0', @read_only = 1;
EXEC sp_set_session_context 'iat', '1637043209', @read_only = 1;
...
EXEC sp_set_session_context 'azp', 'a903e2e6-fd13-4502-8cae-9e09f86b7a6c', @read_only = 1;
EXEC sp_set_session_context 'azpacr', 1, @read_only = 1;
..
EXEC sp_set_session_context 'uti', '_sSP3AwBY0SucuqqJyjEAA', @read_only = 1;
EXEC sp_set_session_context 'ver', '2.0', @read_only = 1;

Ardından oturum verilerini kullanarak satır düzeyi güvenlik (RLS) uygulayabilirsiniz. Daha fazla bilgi için bkz . Oturum bağlamı ile satır düzeyi güvenlik uygulama.

Azure Cosmos DB

Azure Cosmos DB'deki çeşitli API'lere özgü birkaç özel özellik vardır.

NoSQL için API'de şema

NoSQL için Azure Cosmos DB şemadan bağımsızdır. Data API builder'ı NoSQL API'siyle kullanmak için kapsayıcınızın veri modelini temsil eden nesne türü tanımlarını içeren bir GraphQL şema dosyası oluşturmanız gerekir. Veri API oluşturucusu ayrıca, daha kısıtlayıcı okuma erişimini anonymouszorlamak istediğinizde GraphQL nesne türü tanımlarınızın ve alanlarınızın GraphQL şema yönergesini authorize içermesini bekler.

Örneğin, bu şema dosyası kapsayıcı içindeki bir Book öğeyi temsil eder. Bu öğe, en azından title ve Authors özelliklerini içerir.

type Book @model(name:"Book"){
  id: ID
  title: String @authorize(roles:["metadataviewer","authenticated"])
  Authors: [Author]
}

Bu örnek şema, DAB yapılandırma dosyasında aşağıdaki varlık yapılandırmasına karşılık gelir. Daha fazla bilgi için bkz entities . yapılandırma başvurusu.

{
  ...
  "Book": {
    "source": "Book",
    "permissions": [
      {
        "role": "anonymous",
        "actions": [ "read" ]
      },
      {
        "role": "metadataviewer",
        "actions": [ "read" ]
      }
    ]
  }
  ...
}

@authorize ile roles:["metadataviewer","authenticated"] yönergesi, alana erişimi title yalnızca ve authenticatedrollerine metadataviewer sahip kullanıcılarla kısıtlar. Kimliği doğrulanmış istek sahipleri için sistem rolü authenticated otomatik olarak atanır ve üst X-MS-API-ROLE bilgi gereksinimi ortadan kaldırılır.

Kimliği doğrulanmış isteğin metadataviewerbağlamında yürütülmesi gerekiyorsa, istek üst bilgisi olarak ayarlanmış metadataviewerbir istek üst bilgisi X-MS-API-ROLE ile birlikte verilmelidir. Ancak anonim erişim isteniyorsa yetkili yönergeyi atlamalısınız.

yönergesi @model , bu GraphQL nesne türü ile çalışma zamanı yapılandırmasındaki ilgili varlık adı arasında bir bağıntı kurmak için kullanılır. yönergesi şu şekilde biçimlendirilir: @model(name:"<Entity_Name>")

Daha ayrıntılı bir örnek olarak yönergesi @authorize en üst düzey tür tanımında uygulanabilir. Bu uygulama türüne ve alanlarına erişimi yalnızca yönergesinde belirtilen rollerle kısıtlar.

type Series @model(name:"Series") @authorize(roles:["editor","authenticated"]) {
  id: ID
  title: String
  Books: [Book]
}
{
  "Book": {
    "source": "Series",
    "permissions": [
      {
        "role": "authenticated",
        "actions": [ "read" ]
      },
      {
        "role": "editor",
        "actions": [ "*" ]
      }
    ]
  }
}

NoSQL için API'de kapsayıcılar arası sorgular

Kapsayıcılar arasında GraphQL işlemleri desteklenmez. Altyapı şunu belirten bir hata iletisiyle yanıt verir: Adding/updating Relationships is currently not supported in Azure Cosmos DB for NoSQL.

Veri modelinizi aynı kapsayıcı içindeki varlıkları ekli biçimde depoacak şekilde güncelleştirerek bu sınırlamaya geçici bir çözüm bulabilirsiniz. Daha fazla bilgi için bkz. NoSQL için Azure Cosmos DB'de veri modelleme.