Yönetilen kimlik kullanarak Azure SQL'e dizin oluşturucu bağlantısı kurma

Bu makalede, bağlantı dizesi kimlik bilgilerini sağlamak yerine yönetilen kimlik kullanarak Azure SQL Veritabanı için dizin oluşturucu bağlantısının nasıl ayarlanacağı açıklanmaktadır.

Sistem tarafından atanan yönetilen kimliği veya kullanıcı tarafından atanan yönetilen kimliği (önizleme) kullanabilirsiniz. Yönetilen kimlikler Microsoft Entra oturum açma bilgileridir ve Azure SQL'deki verilere erişmek için Azure rol atamaları gerektirir.

Ön koşullar

  • Arama hizmetiniz için yönetilen bir kimlik oluşturun.

  • SQL'de bir Azure yönetici rolü atayın. Dizin oluşturucu bağlantısında kullanılan kimliğin okuma izinlerine sahip olması gerekir. Bir veritabanında okuma izinleri vermek için SQL Veritabanı veya SQL Yönetilen Örneği'da sunucusu olan bir Microsoft Entra yöneticisi olmanız gerekir.

  • Dizin oluşturucu kavramları ve yapılandırması hakkında bilgi sahibi olmanız gerekir.

1 - Veritabanını okumak için izinler atama

Veritabanını okumak için arama hizmetini veya kullanıcı tarafından atanan yönetilen kimlik iznini atamak için aşağıdaki adımları izleyin.

  1. Visual Studio'ya Bağlan

    Connect to Visual Studio

  2. Microsoft Entra hesabınızla kimlik doğrulaması

    Authenticate

  3. Aşağıdaki komutları yürütün:

    Arama hizmeti adınızın veya kullanıcı tarafından atanan yönetilen kimlik adının çevresine köşeli ayraçları ekleyin.

    CREATE USER [insert your search service name here or user-assigned managed identity name] FROM EXTERNAL PROVIDER;
    EXEC sp_addrolemember 'db_datareader', [insert your search service name here or user-assigned managed identity name];
    

    New query

    Execute query

İzinleri atadıktan sonra arama hizmeti kimliğini veya kullanıcı tarafından atanan kimliği daha sonra değiştirirseniz rol üyeliğini kaldırmanız ve KULLANıCıYı SQL veritabanından kaldırmanız ve ardından izin atamasını yinelemeniz gerekir. Rol üyeliğini ve kullanıcıyı kaldırma işlemi aşağıdaki komutlar çalıştırılarak gerçekleştirilebilir:

sp_droprolemember 'db_datareader', [insert your search service name or user-assigned managed identity name];

DROP USER IF EXISTS [insert your search service name or user-assigned managed identity name];

2 - Rol ataması ekleme

Bu bölümde Azure AI Arama hizmeti SQL Server'ınızdaki verileri okuma izni vereceksiniz. Ayrıntılı adımlar için bkz. Azure portalı kullanarak Azure rolleri atama.

  1. Azure portalında Azure SQL Server sayfanıza gidin.

  2. Erişim denetimi (IAM) öğesini seçin.

  3. Rol ataması ekle'yi > seçin.

    Screenshot that shows Access control (IAM) page with Add role assignment menu open.

  4. Rol sekmesinde uygun Okuyucu rolünü seçin.

  5. Üyeler sekmesinde Yönetilen kimlik'i ve ardından Üye seç'i seçin.

  6. Azure aboneliği seçin.

  7. Sistem tarafından atanan bir yönetilen kimlik kullanıyorsanız Sistem tarafından atanan yönetilen kimlik'i seçin, arama hizmetinizi arayın ve ardından seçin.

  8. Aksi takdirde, kullanıcı tarafından atanan bir yönetilen kimlik kullanıyorsanız Kullanıcı tarafından atanan yönetilen kimlik'i seçin, kullanıcı tarafından atanan yönetilen kimliğin adını arayın ve seçin.

  9. Gözden geçirme + atama sekmesinde Gözden geçir + ata’yı seçerek rolü atayın.

3 - Veri kaynağını oluşturma

Veri kaynağını oluşturun ve sistem tarafından atanan yönetilen kimlik veya kullanıcı tarafından atanan yönetilen kimlik (önizleme) sağlayın.

Sistem tarafından atanan yönetilen kimlik

REST API, Azure portalı ve .NET SDK sistem tarafından atanan yönetilen kimliği destekler.

Sistem tarafından atanan yönetilen kimlikle bağlanırken, veri kaynağı tanımında yapılan tek değişiklik "kimlik bilgileri" özelliğinin biçimidir. İlk Katalog veya Veritabanı adı ile hesap anahtarı veya parolası olmayan bir ResourceId sağlayacaksınız. ResourceId, Azure SQL Veritabanı abonelik kimliğini, SQL Veritabanı kaynak grubunu ve SQL veritabanının adını içermelidir.

Veri Kaynağı Oluşturma REST API'sini ve yönetilen kimlik bağlantı dizesi kullanarak depolama hesabından verileri dizine almak için veri kaynağı oluşturma örneği aşağıda verilmiştir. Yönetilen kimlik bağlantı dizesi biçimi REST API, .NET SDK ve Azure portalı için aynıdır.

POST https://[service name].search.windows.net/datasources?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    }
} 

Kullanıcı tarafından atanan yönetilen kimlik (önizleme)

2021-04-30-preview REST API,kullanıcı tarafından atanan yönetilen kimliğe dayalı bağlantıları destekler. Kullanıcı tarafından atanan bir yönetilen kimlikle bağlanırken, veri kaynağı tanımında iki değişiklik vardır:

  • İlk olarak, "kimlik bilgileri" özelliğinin biçimi bir İlk Katalog veya Veritabanı adı ve hesap anahtarı veya parolası olmayan bir ResourceId'dir. ResourceId, Azure SQL Veritabanı abonelik kimliğini, SQL Veritabanı kaynak grubunu ve SQL veritabanının adını içermelidir. Bu, sistem tarafından atanan yönetilen kimlikle aynı biçimdir.

  • İkincisi, kullanıcı tarafından atanan yönetilen kimliklerin koleksiyonunu içeren bir "identity" özelliği ekleyeceksiniz. Veri kaynağı oluşturulurken yalnızca bir kullanıcı tarafından atanan yönetilen kimlik sağlanmalıdır. "userAssignedIdentities" yazacak şekilde ayarlayın.

Aşağıda, Veri Kaynağı Oluşturma veya Güncelleştirme REST API'sini kullanarak dizin oluşturucu veri kaynağı nesnesi oluşturma örneği verilmiştir:

POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-preview
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
    },
    "container" : { 
        "name" : "my-table" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
    }
}   

4 - Dizini oluşturma

Dizin, bir belgedeki alanları, öznitelikleri ve arama deneyimini şekillendiren diğer yapıları belirtir.

Aşağıda aranabilir bir alanı olan Dizin REST API'sini Oluştur çağrısı verilmiştir booktitle :

POST https://[service name].search.windows.net/indexes?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-target-index",
    "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "booktitle", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
    ]
}

5 - Dizin oluşturucu oluşturma

Dizin oluşturucu bir veri kaynağını hedef arama dizinine bağlar ve veri yenilemeyi otomatikleştirmek için bir zamanlama sağlar. Dizin ve veri kaynağı oluşturulduktan sonra dizin oluşturucuyu oluşturmaya hazır olursunuz. Dizin oluşturucu başarılı olursa, bağlantı söz dizimi ve rol atamaları geçerli olur.

Azure SQL dizin oluşturucu tanımına sahip bir Dizin Oluşturucu REST API çağrısı aşağıda verilmiştir. İsteği gönderdiğinizde dizin oluşturucu çalışır.

POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-indexer",
    "dataSourceName" : "sql-datasource",
    "targetIndexName" : "my-target-index"

Sorun giderme

Dizin oluşturucu, istemcinin sunucuya erişmesine izin verilmediğini belirten veri kaynağına bağlanmaya çalıştığında bir hata alırsanız, sık karşılaşılan dizin oluşturucu hatalarına göz atın.

Ayrıca, herhangi bir kısıtlama olmadan ve ile bağlantıyı deneyerek güvenlik duvarı sorunlarını eleyebilirsiniz.

Ayrıca bkz.