Condividi tramite


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

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

È possibile usare un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente (anteprima). Le identità gestite sono account di accesso 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.

    Autentica

  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

    Eseguire la 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 effettuata 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à al servizio Azure AI Search l'autorizzazione per leggere i dati da SQL Server. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

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

  2. Seleziona Controllo di accesso (IAM).

  3. Selezionare Aggiungi > 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 Seleziona membri.

  6. Seleziona la tua sottoscrizione di 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 l'origine dati e fornire un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente (anteprima).

Identità gestita assegnata dal sistema

L'API REST, il portale di Azure e .NET SDK 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 di 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 identity 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=2023-11-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 (anteprima)

Le API REST di anteprima 2021-04-30 e versioni successive supportano le connessioni basate su 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 database e un ResourceId che non ha una chiave o una password dell'account. ResourceId deve includere l'ID sottoscrizione di database SQL di Azure, il gruppo di risorse di 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 la versione dell'API di anteprima più recente per Creare o aggiornare l'origine dati:

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

L'indice consente di specificare i campi in un documento, gli attributi e altri costrutti che danno forma all'esperienza della ricerca.

Ecco una chiamata all'API REST Crea indicizzatore con un campo ricercabile booktitle:

POST https://[service name].search.windows.net/indexes?api-version=2023-11-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 un indicizzatore

Un indicizzatore si connette a un'origine dati con un indice di ricerca di destinazione e consente di pianificare l'automatizzazione dell'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 all'API REST Crea indicizzatore con una definizione dell'indicizzatore SQL di Azure. L'indicizzatore viene eseguito quando si invia la richiesta.

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

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

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

Vedi anche

Indicizzatore di Azure SQL