Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri API'sini oluşturucu, 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 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 | n/a |
| NoSQL için Azure Cosmos DB | n/a |
| PostgreSQL için Azure Cosmos DB | n/a |
Azure SQL ve SQL Server
Hem Azure SQL hem de SQL Server dahil olmak üzere SQL'e özgü birkaç özellik vardır.
SESSION_CONTEXT
Azure SQL ve SQL Server, geçerli kullanıcının kimliğine erişmek için işlevinin kullanımını SESSION_CONTEXT destekler. Bu özellik, Azure SQL ve SQL Server'da kullanılabilen satır düzeyi güvenlik (RLS) için yerel desteği uygulamak istediğinizde kullanışlıdır.
Azure SQL ve SQL Server için Veri API oluşturucusu, kullanıcı tarafından belirtilen meta verileri temel alınan veritabanına göndermek için SESSION_CONTEXT yararlanabilir. Bu meta veriler, erişim belirtecinde bulunan talepler nedeniyle Veri API'sini oluşturucusunun kullanımına sunulur. 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.
SESSION_CONTEXT verileri, 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 SESSION_CONTEXToptions bölümünün özelliğini kullanarak yapılandırındata-source. 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 --set-session-context kullanındab init.
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 |
Audience |
iss |
Issuer |
iat |
Issued at |
exp |
Expiration time |
azp |
Application identifier |
azpacr |
İstemcinin kimlik doğrulama yöntemi |
name |
Subject |
uti |
Benzersiz belirteç tanımlayıcısı |
Talepler hakkında daha fazla bilgi için bkz. Microsoft Entra Id erişim belirteci talep başvurusu.
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ıyla satır düzeyi güvenlik uygulama.
Azure Cosmos DB veritabanı
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, değerinden daha kısıtlayıcı okuma erişimi authorizezorlamak istediğinizde GraphQL nesne türü tanımlarınızın ve alanlarınızın GraphQL şema yönergesini anonymous içermesini de 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 metadataviewerrollerine authenticated 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 bağlamında metadatavieweryürütülmesi gerekiyorsa, istek üst bilgisi olarak ayarlanmış X-MS-API-ROLEbir istek üst bilgisi metadataviewer ile birlikte verilmelidir. Ancak anonim erişim istenirse 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ı oluşturmak 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ına 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 depolamak için 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.