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
Maak een beheerde identiteit voor uw zoekservice.
Wijs een Azure-beheerdersrol toe aan SQL. De identiteit die wordt gebruikt voor de verbinding met de indexeerfunctie, heeft leesmachtigingen nodig. U moet een Microsoft Entra-beheerder zijn met een server in SQL Database of SQL Managed Instance om leesmachtigingen voor een database te verlenen.
U moet bekend zijn met de concepten en configuratie van de indexeerfunctie.
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.
Maak verbinding met Visual Studio.
Verifieer met uw Microsoft Entra-account.
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];
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.
Navigeer in Azure Portal naar uw Azure SQL Server-pagina.
Klik op Toegangsbeheer (IAM) .
Selecteer Roltoewijzing toevoegen.>
Selecteer op het tabblad Rol de juiste rol Lezer .
Selecteer op het tabblad Leden, Beheerde identiteit en selecteer vervolgens Leden selecteren.
Selecteer uw Azure-abonnement.
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.
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.
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=2024-07-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"
}
}
Door de gebruiker toegewezen beheerde identiteit (preview)
De REST API's van 2021-04-30 en hoger bieden ondersteuning voor 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.
Voeg ten tweede 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 gegevensbronobject voor een indexeerfunctie met behulp van de meest recente preview-API-versie voor gegevensbron maken of bijwerken:
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 - 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=2024-07-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 - 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=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-indexer",
"dataSourceName" : "sql-datasource",
"targetIndexName" : "my-target-index"
}
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.