Konfigurera en indexerareanslutning till Azure SQL med hjälp av en hanterad identitet
Den här artikeln beskriver hur du konfigurerar en indexeraranslutning till Azure SQL Database med hjälp av en hanterad identitet i stället för att ange autentiseringsuppgifter i anslutningssträng.
Du kan använda en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet (förhandsversion). Hanterade identiteter är Microsoft Entra-inloggningar och kräver Azure-rolltilldelningar för åtkomst till data i Azure SQL.
Förutsättningar
Skapa en hanterad identitet för söktjänsten.
Tilldela en Azure-administratörsroll i SQL. Den identitet som används för indexerarens anslutning behöver läsbehörighet. Du måste vara Microsoft Entra-administratör med en server i SQL Database eller SQL Managed Instance för att bevilja läsbehörighet för en databas.
Du bör känna till indexerarens begrepp och konfiguration.
1 – Tilldela behörigheter för att läsa databasen
Följ stegen nedan för att tilldela söktjänsten eller användartilldelad hanterad identitet behörighet att läsa databasen.
Anslut till Visual Studio.
Autentisera med ditt Microsoft Entra-konto.
Kör följande kommandon:
Ta med hakparenteserna runt söktjänstens namn eller användartilldelade hanterade identitetsnamn.
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];
Om du senare ändrar söktjänstidentiteten eller den användartilldelade identiteten när du har tilldelat behörigheter måste du ta bort rollmedlemskapet och ta bort användaren i SQL-databasen och sedan upprepa behörighetstilldelningen. Du kan ta bort rollmedlemskapet och användaren genom att köra följande kommandon:
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 – Lägg till en rolltilldelning
I det här avsnittet ger du din Azure AI-tjänsten Search behörighet att läsa data från din SQL Server. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.
I Azure Portal går du till din Azure SQL Server-sida.
Välj Åtkomstkontroll (IAM) .
Välj Lägg till lägg till > rolltilldelning.
På fliken Roll väljer du lämplig läsarroll .
Från fliken Medlemmar väljer du Hanterad identitet och välj sedan Välj medlemmar.
Välj din Azure-prenumerationen.
Om du använder en systemtilldelad hanterad identitet väljer du Systemtilldelad hanterad identitet, söker efter söktjänsten och väljer den.
Om du använder en användartilldelad hanterad identitet väljer du Användartilldelad hanterad identitet, söker efter namnet på den användartilldelade hanterade identiteten och väljer den sedan.
På fliken Granska + tilldela väljer du Granska + tilldela för att tilldela rollen.
3 – Skapa datakällan
Skapa datakällan och ange antingen en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet (förhandsversion).
Systemtilldelad hanterad identitet
REST API, Azure Portal och .NET SDK stöder systemtilldelad hanterad identitet.
När du ansluter med en systemtilldelad hanterad identitet är den enda ändringen av datakällans definition formatet för egenskapen "autentiseringsuppgifter". Du anger ett initialt katalog- eller databasnamn och ett ResourceId som inte har någon kontonyckel eller lösenord. ResourceId måste innehålla prenumerations-ID för Azure SQL Database, resursgruppen för SQL Database och namnet på SQL-databasen.
Här är ett exempel på hur du skapar en datakälla för att indexera data från ett lagringskonto med hjälp av REST-API:et Skapa datakälla och en hanterad identitet anslutningssträng. Den hanterade identiteten anslutningssträng format är samma för REST API, .NET SDK och 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"
}
}
Användartilldelad hanterad identitet (förhandsversion)
REST-API:erna för förhandsversionen 2021-04-30 och senare stöder anslutningar baserat på en användartilldelad hanterad identitet. När du ansluter med en användartilldelad hanterad identitet finns det två ändringar i datakällans definition:
För det första är formatet för egenskapen "autentiseringsuppgifter" ett initialt katalog- eller databasnamn och ett ResourceId som inte har någon kontonyckel eller lösenord. ResourceId måste innehålla prenumerations-ID för Azure SQL Database, resursgruppen för SQL Database och namnet på SQL-databasen. Det här är samma format som den systemtilldelade hanterade identiteten.
För det andra lägger du till en "identitetsegenskap" som innehåller samlingen med användartilldelade hanterade identiteter. Endast en användartilldelad hanterad identitet ska anges när datakällan skapas. Ange att den ska skriva "userAssignedIdentities".
Här är ett exempel på hur du skapar ett indexerardatakällans objekt med den senaste förhandsversionen av API:et för att skapa eller uppdatera datakälla:
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 – Skapa indexet
Indexet anger fälten i ett dokument, attribut och andra konstruktioner som formar sökupplevelsen.
Här är ett REST API-anrop för skapa index med ett sökbart booktitle
fält:
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 – Skapa indexeraren
En indexerare ansluter en datakälla till ett målsökningsindex och tillhandahåller ett schema för att automatisera datauppdateringen. När indexet och datakällan har skapats är du redo att skapa indexeraren. Om indexeraren lyckas är anslutningssyntaxen och rolltilldelningarna giltiga.
Här är ett CREATE Indexer REST API-anrop med en Azure SQL-indexeraredefinition. Indexeraren körs när du skickar begäran.
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"
}
Om du får ett fel när indexeraren försöker ansluta till datakällan som säger att klienten inte har behörighet att komma åt servern kan du ta en titt på vanliga indexeringsfel.