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 options
data-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 anonymous
zorlamak 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 authenticated
rollerine 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 metadataviewer
bağlamında yürütülmesi gerekiyorsa, istek üst bilgisi olarak ayarlanmış metadataviewer
bir 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.