Een indexeerfunctieverbinding met Azure SQL instellen met behulp van een beheerde identiteit

In dit artikel wordt uitgelegd hoe u een indexeerfunctieverbinding met Azure SQL Database instelt met behulp van een beheerde identiteit in plaats van referenties op te geven in de verbindingsreeks.

U kunt een door het systeem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit (preview) gebruiken. Beheerde identiteiten zijn Microsoft Entra-aanmeldingen en vereisen Azure-roltoewijzingen voor toegang tot gegevens in Azure SQL.

Vereisten

1 - Machtigingen toewijzen om de database te lezen

Volg de onderstaande stappen om de machtiging voor de zoekservice of door de gebruiker toegewezen beheerde identiteit toe te wijzen om de database te lezen.

  1. Verbinding maken naar Visual Studio

    Connect to Visual Studio

  2. Verifiëren met uw Microsoft Entra-account

    Authenticate

  3. Voer de volgende opdracht uit:

    Neem de haken rond de naam van uw zoekservice of door de gebruiker toegewezen beheerde identiteitsnaam op.

    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

Als u later de identiteit van de zoekservice of door de gebruiker toegewezen identiteit wijzigt nadat u machtigingen hebt toegewezen, moet u het rollidmaatschap verwijderen en de gebruiker in de SQL-database verwijderen en vervolgens de machtigingstoewijzing herhalen. U kunt het rollidmaatschap en de gebruiker verwijderen door de volgende opdrachten uit te voeren:

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 - Een roltoewijzing toevoegen

In deze sectie geeft u uw Azure AI-Search-service toestemming om gegevens van uw SQL Server te lezen. Raadpleeg Azure-rollen toewijzen met Azure Portal voor informatie over het toewijzen van rollen.

  1. Navigeer in Azure Portal naar uw Azure SQL Server-pagina.

  2. Klik op Toegangsbeheer (IAM) .

  3. Selecteer Roltoewijzing toevoegen.>

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

  4. Selecteer op het tabblad Rol de juiste rol Lezer .

  5. Selecteer beheerde identiteit op het tabblad Leden en selecteer vervolgens Leden selecteren.

  6. Selecteer uw Azure-abonnement.

  7. Als u een door het systeem toegewezen beheerde identiteit gebruikt, selecteert u door het systeem toegewezen beheerde identiteit, zoekt u uw zoekservice en selecteert u deze.

  8. Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, selecteert u door de gebruiker toegewezen beheerde identiteit, zoekt u de naam van de door de gebruiker toegewezen beheerde identiteit en selecteert u deze.

  9. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

3 - De gegevensbron maken

Maak de gegevensbron en geef een door het systeem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit (preview) op.

Door het systeem toegewezen beheerde identiteit

De REST API, Azure Portal en de .NET SDK ondersteunen door het systeem toegewezen beheerde identiteit.

Wanneer u verbinding maakt met een door het systeem toegewezen beheerde identiteit, is de enige wijziging in de definitie van de gegevensbron de indeling van de eigenschap Referenties. U geeft een initiële catalogus of databasenaam en een ResourceId op die geen accountsleutel of wachtwoord heeft. De ResourceId moet de abonnements-id van Azure SQL Database, de resourcegroep van SQL Database en de naam van de SQL-database bevatten.

Hier volgt een voorbeeld van het maken van een gegevensbron voor het indexeren van gegevens uit een opslagaccount met behulp van de REST API voor gegevensbron maken en een beheerde identiteit verbindingsreeks. De indeling van de beheerde identiteit verbindingsreeks is hetzelfde voor de REST API, .NET SDK en Azure Portal.

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" 
    }
} 

Door de gebruiker toegewezen beheerde identiteit (preview)

De REST API 2021-04-30-preview ondersteunt verbindingen op basis van een door de gebruiker toegewezen beheerde identiteit. Wanneer u verbinding maakt met een door de gebruiker toegewezen beheerde identiteit, zijn er twee wijzigingen in de definitie van de gegevensbron:

  • Ten eerste is de indeling van de eigenschap Referenties een initiële catalogus of databasenaam en een ResourceId die geen accountsleutel of wachtwoord heeft. De ResourceId moet de abonnements-id van Azure SQL Database, de resourcegroep van SQL Database en de naam van de SQL-database bevatten. Dit is dezelfde indeling als de door het systeem toegewezen beheerde identiteit.

  • Ten tweede voegt u een 'identiteit'-eigenschap toe die de verzameling door de gebruiker toegewezen beheerde identiteiten bevat. Er moet slechts één door de gebruiker toegewezen beheerde identiteit worden opgegeven bij het maken van de gegevensbron. Stel deze in om 'userAssignedIdentities' te typen.

Hier volgt een voorbeeld van het maken van een indexeerfunctie voor een gegevensbronobject met behulp van de PREVIEW-api voor het maken of bijwerken van gegevensbron :

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 - De index maken

De index geeft de velden in een document, kenmerken en andere constructies op die de zoekervaring vormgeven.

Hier volgt een REST API-aanroep voor index maken met een doorzoekbaar booktitle veld:

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 - De indexeerfunctie maken

Een indexeerfunctie verbindt een gegevensbron met een doelzoekindex en biedt een schema voor het automatiseren van de gegevensvernieuwing. Zodra de index en de gegevensbron zijn gemaakt, kunt u de indexeerfunctie maken. Als de indexeerfunctie is geslaagd, zijn de verbindingssyntaxis en roltoewijzingen geldig.

Hier volgt een Aanroep voor de REST API voor Indexer maken met een Definitie van een Azure SQL-indexeerfunctie. De indexeerfunctie wordt uitgevoerd wanneer u de aanvraag indient.

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"

Problemen oplossen

Als er een fout optreedt wanneer de indexeerfunctie verbinding probeert te maken met de gegevensbron met de mededeling dat de client geen toegang heeft tot de server, bekijkt u veelvoorkomende indexeerfunctiefouten.

U kunt ook firewallproblemen uitsluiten door de verbinding met en zonder beperkingen in te stellen.

Zie ook