Configurare una connessione dell'indicizzatore per Azure SQL usando un'identità gestita

Note

Azure AI Search è disponibile tramite il portale di Azure, le API REST e Azure SDK. È inoltre alla base di Foundry IQ, il livello di conoscenza gestito che trasforma il contenuto aziendale in knowledge base riutilizzabili e con riconoscimento delle autorizzazioni per gli agenti nel portale di Microsoft Foundry.

Questo articolo illustra come configurare una connessione dell'indicizzatore per database SQL di Azure usando un'identità gestita anziché fornire le credenziali nel stringa di connessione.

È possibile usare un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente. Le identità gestite sono login di Microsoft Entra e richiedono assegnazioni di ruolo di Azure per accedere ai dati in Azure SQL.

Prerequisiti

1 - Assegnare le autorizzazioni per leggere il database

Seguire questa procedura per assegnare al servizio di ricerca o all'identità gestita assegnata dall'utente l'autorizzazione per leggere il database.

  1. Connettersi a Visual Studio.

    Connettersi a Visual Studio

  2. Eseguire l'autenticazione con l'account Microsoft Entra.

    Autenticare

  3. Eseguire i comandi seguenti:

    Includere le parentesi quadre intorno al nome del servizio di ricerca o al nome dell'identità gestita assegnata dall'utente.

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

    Nuova query

    Esegui query

Se in un secondo momento si modifica l'identità del servizio di ricerca o l'identità assegnata dall'utente dopo l'assegnazione delle autorizzazioni, è necessario rimuovere l'appartenenza al ruolo e rimuovere l'utente nel database SQL, quindi ripetere l'assegnazione delle autorizzazioni. La rimozione dell'appartenenza al ruolo e dell'utente può essere eseguita eseguendo i comandi seguenti:

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 - Aggiungere un'assegnazione di ruolo

In questa sezione si concederà l'autorizzazione al servizio Azure AI Search per leggere i dati da SQL Server. Per i passaggi dettagliati, vedere Assegnare i ruoli di Azure usando il portale di Azure.

  1. Nel portale di Azure passare alla pagina Azure SQL Server.

  2. Selezionare Controllo di accesso (IAM).

  3. Selezionare Aggiungi assegnazione > di ruolo.

    Screenshot che mostra la pagina Controllo di accesso (IAM) con il menu Aggiungi assegnazione di ruolo aperto.

  4. Nella scheda Ruolo selezionare il ruolo Lettore appropriato.

  5. Nella scheda Membri selezionare Identità gestita e quindi selezionare Seleziona membri.

  6. Selezionare la sottoscrizione Azure.

  7. Se si usa un'identità gestita assegnata dal sistema, selezionare Identità gestita assegnata dal sistema, cercare il servizio di ricerca e quindi selezionarlo.

  8. In caso contrario, se si usa un'identità gestita assegnata dall'utente, selezionare Identità gestita assegnata dall'utente, cercare il nome dell'identità gestita assegnata dall'utente e quindi selezionarla.

  9. Nella scheda Rivedi e assegna selezionare Rivedi e assegna per assegnare il ruolo.

3 - Creare l'origine dati

Creare la fonte dati e fornire un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente.

Identità gestita assegnata dal sistema

L'API REST, il portale Azure e gli SDK di Azure supportano l'identità gestita assegnata dal sistema.

Quando ci si connette con un'identità gestita assegnata dal sistema, l'unica modifica alla definizione dell'origine dati è il formato della proprietà "credentials". Si fornirà un nome di database o di catalogo iniziale e un valore ResourceId senza chiave o password dell'account. ResourceId deve includere l'ID sottoscrizione di database SQL di Azure, il gruppo di risorse del database SQL e il nome del database SQL.

Ecco un esempio di come creare un'origine dati per indicizzare i dati da un account di archiviazione usando l'API REST Create Data Source e una stringa di connessione di identità gestita. Il formato della stringa di connessione dell'identità gestita è lo stesso per l'API REST, .NET SDK e il portale di Azure.

POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
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" 
    }
} 

Identità gestita assegnata dall'utente

L'API REST versione 2026-04-01 e successive supporta le connessioni in base a un'identità gestita assegnata dall'utente. Quando ci si connette con un'identità gestita assegnata dall'utente, vengono apportate due modifiche alla definizione dell'origine dati:

  • In primo luogo, il formato della proprietà "credentials" è un nome catalogo iniziale o nome del database e un ResourceId senza chiave o password dell'account. ResourceId deve includere l'ID sottoscrizione di database SQL di Azure, il gruppo di risorse del database SQL e il nome del database SQL. Si tratta dello stesso formato dell'identità gestita assegnata dal sistema.

  • In secondo luogo, aggiungere una proprietà "identity" che contiene la raccolta di identità gestite assegnate dall'utente. Quando si crea l'origine dati, è necessario specificare un'unica identità gestita assegnata dall'utente. Impostarlo sul tipo "userAssignedIdentities".

Di seguito è riportato un esempio di come creare un oggetto origine dati dell'indicizzatore usando origini dati - Creare o aggiornare:

POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
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 - Creare l'indice

L'indice specifica i campi in un documento, attributi e altri costrutti che modellano l'esperienza di ricerca.

Ecco una chiamata all'API REST Create Index con un campo ricercabile booktitle :

POST https://[service name].search.windows.net/indexes?api-version=2026-04-01
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 - Creare l'indicizzatore

Un indicizzatore connette un'origine dati con un indice di ricerca di destinazione e fornisce una pianificazione per automatizzare l'aggiornamento dei dati. Dopo aver creato l'indice e l'origine dati, è possibile creare l'indicizzatore. Se l'indicizzatore ha esito positivo, la sintassi di connessione e le assegnazioni di ruolo sono valide.

Ecco una chiamata API REST Crea indicizzatore con una definizione dell'indicizzatore Azure SQL. L'indicizzatore viene eseguito quando si invia la richiesta.

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

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

Se viene visualizzato un errore quando l'indicizzatore tenta di connettersi all'origine dati che indica che il client non è autorizzato ad accedere al server, esaminare gli errori comuni dell'indicizzatore.

Vedere anche

Azure SQL indicizzatore