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

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.

  1. Anslut till Visual Studio

    Connect to Visual Studio

  2. Autentisera med ditt Microsoft Entra-konto

    Authenticate

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

    New query

    Execute query

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.

  1. Gå till azure SQL Server-sidan i Azure-portalen.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till lägg till > rolltilldelning.

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

  4. På fliken Roll väljer du lämplig läsarroll .

  5. På fliken Medlemmar väljer du Hanterad identitet och väljer sedan Välj medlemmar.

  6. Välj din Azure-prenumerationen.

  7. Om du använder en systemtilldelad hanterad identitet väljer du Systemtilldelad hanterad identitet, söker efter söktjänsten och väljer den.

  8. 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.

  9. 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-portalen 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. Det hanterade identitetsformatet anslutningssträng är detsamma för REST API, .NET SDK och Azure-portalen.

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

Användartilldelad hanterad identitet (förhandsversion)

REST API för förhandsversionen 2021-04-30 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 förhandsversionen av REST-API:et Skapa eller uppdatera datakälla :

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 – 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=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 – 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=2020-06-30
Content-Type: application/json
api-key: [admin key]

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

Felsökning

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.

Du kan också utesluta eventuella brandväggsproblem genom att prova anslutningen med och utan begränsningar.

Se även