Einrichten einer Indexerverbindung mit Azure SQL mithilfe einer verwalteten Identität
In diesem Artikel wird erläutert, wie Sie eine Indexerverbindung mit Azure SQL-Datenbank mithilfe einer verwalteten Identität einrichten, statt Anmeldeinformationen in der Verbindungszeichenfolge anzugeben.
Sie können eine systemseitig zugewiesene verwaltete Identität oder eine benutzerseitig zugewiesene verwaltete Identität (Vorschau) verwenden. Verwaltete Identitäten sind Microsoft Entra-Anmeldungen und erfordern Azure-Rollenzuweisungen für den Zugriff auf Daten in Azure SQL.
Voraussetzungen
Erstellen Sie eine verwaltete Identität für Ihren Suchdienst.
Weisen Sie eine Azure-Administratorrolle in SQL zu. Die für die Indexerverbindung verwendete Identität benötigt Leseberechtigungen. Sie müssen Microsoft Entra-Administrator*in mit einem Server in SQL-Datenbank oder SQL Managed Instance sein, um Leseberechtigungen für eine Datenbank zuzuweisen.
Sie sollten mit den Konzepten für Indexer und mit dem Konfigurieren von Indexern vertraut sein.
1. Zuweisen von Berechtigungen zum Lesen der Datenbank
Führen Sie die folgenden Schritte aus, um dem Suchdienst oder der benutzerseitig zugewiesenen verwalteten Identität die Berechtigung zum Lesen der Datenbank zuzuweisen.
Herstellen der Verbindung mit Visual Studio
Authentifizieren mit Ihrem Microsoft Entra-Konto.
Führen Sie die folgenden Befehle aus:
Geben Sie die Klammern um den Namen Ihres Suchdiensts oder der benutzerseitig zugewiesenen verwalteten Identität mit ein.
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];
Wenn Sie die Suchdienstidentität oder die vom Benutzer zugewiesene Identität zu einem späteren Zeitpunkt nach dem Zuweisen von Berechtigungen ändern, müssen Sie die Rollenmitgliedschaft entfernen und den Benutzer aus der SQL-Datenbank entfernen. Wiederholen Sie anschließend die Berechtigungszuweisung. Die Rollenmitgliedschaft und der Benutzer können durch Ausführen der folgenden Befehle entfernt werden:
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. Hinzufügen einer Rollenzuweisung
In diesem Abschnitt erteilen Sie dem Azure KI Search-Dienst die Berechtigung, Daten von SQL Server zu lesen. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Navigieren Sie im Azure-Portal zur Seite von Azure SQL Server.
Wählen Sie die Option Zugriffssteuerung (IAM) aus.
Wählen Sie Hinzufügen > Rollenzuweisung hinzufügen aus.
Wählen Sie auf der Registerkarte Rolle die entsprechende Rolle Leser aus.
Wählen Sie auf der Registerkarte Mitglieder die Option Verwaltete Identität und dann Mitglieder auswählen aus.
Wählen Sie Ihr Azure-Abonnement.
Wenn Sie eine systemseitig zugewiesene verwaltete Identität verwenden, wählen Sie systemseitig zugewiesene verwaltete Identität aus, suchen Sie nach Ihrem Suchdienst, und wählen Sie sie dann aus.
Wenn Sie eine benutzerseitig zugewiesene verwaltete Identität verwenden, suchen Sie nach dem Namen der benutzerseitig zugewiesenen verwalteten Identität, und wählen Sie sie aus.
Wählen Sie auf der Registerkarte Überprüfen und zuweisen die Option Überprüfen und zuweisen aus, um die Rolle zuzuweisen.
3. Erstellen der Datenquelle
Erstellen Sie die Datenquelle, und stellen Sie entweder eine systemseitig zugewiesene verwaltete Identität oder eine benutzerseitig zugewiesene verwaltete Identität (Vorschau) bereit.
Systemseitig zugewiesene verwaltete Identität
Die systemseitig zugewiesene verwaltete Identität wird von der REST-API, dem Azure-Portal und dem .NET SDK unterstützt.
Wenn Sie eine Verbindung mit einer systemseitig zugewiesenen verwalteten Identität herstellen, besteht die einzige Änderung an der Datenquellendefinition im Format der Eigenschaft „credentials“. Hier geben Sie den Namen für einen Anfangskatalog oder eine Anfangsdatenbank und eine ResourceId an, der kein Kontoschlüssel und kein Kennwort zugewiesen sind. Die „ResourceId“ muss die Abonnement-ID von Azure SQL-Datenbank, die Ressourcengruppe der SQL-Datenbank und den Namen der SQL-Datenbank enthalten.
Hier finden Sie ein Beispiel für das Erstellen einer Datenquelle zum Indizieren von Daten aus einem Speicherkonto mithilfe der REST-API zum Erstellen von Datenquellen und einer Verbindungszeichenfolge für verwaltete Identitäten. Das Format der Verbindungszeichenfolge für verwaltete Identitäten ist für die REST-API, das .NET SDK und das Azure-Portal identisch.
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"
}
}
Benutzerseitig zugewiesene verwaltete Identität (Vorschau)
Die REST-APIs der Vorschauversion „2021-04-30-preview“ und höher unterstützen Verbindungen basierend auf einer benutzerseitig zugewiesenen verwalteten Identität. Wenn Sie eine Verbindung mit einer benutzerseitig zugewiesenen verwalteten Identität herstellen, erfolgen zwei Änderungen an der Datenquellendefinition:
Erstens weist das Format der Eigenschaft „credentials“ einen Anfangskatalog oder einen Datenbanknamen und eine RessourceId ohne Kontoschlüssel oder Kennwort auf. Die „ResourceId“ muss die Abonnement-ID von Azure SQL-Datenbank, die Ressourcengruppe der SQL-Datenbank und den Namen der SQL-Datenbank enthalten. Dies ist das gleiche Format wie bei der systemseitig zugewiesenen verwalteten Identität.
Zweitens fügen Sie eine „identity“-Eigenschaft hinzu, die die Sammlung der benutzerseitig zugewiesenen verwalteten Identitäten enthält. Beim Erstellen der Datenquelle sollte nur eine benutzerseitig zugewiesene verwaltete Identität bereitgestellt werden. Legen Sie sie auf den Typ „userAssignedIdentities“ fest.
Hier finden Sie ein Beispiel für das Erstellen eines Indexer-Datenquellenobjekts mithilfe der neuesten API-Vorschauversion zum Erstellen oder Aktualisieren einer Datenquelle:
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. Erstellen des Index
Mit dem Index werden die Felder in einem Dokument, Attribute und andere Konstrukte für die Suchoberfläche angegeben.
Hier sehen Sie einen „Erstellen eines Index“-REST-API-Aufruf mit einem suchbaren booktitle
-Feld:
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. Erstellen des Indexers
Ein Indexer verbindet eine Datenquelle mit einem Zielsuchindex und stellt einen Zeitplan zur Automatisierung der Datenaktualisierung bereit. Nach der Erstellung von Index und Datenquelle können Sie den Indexer erstellen. Wenn der Indexer erfolgreich ausgeführt wird, sind die Verbindungssyntax und die Rollenzuweisungen gültig.
Hier sehen Sie einen REST-API-Aufruf Indexer erstellen mit einer Azure SQL-Indexerdefinition. Der Indexer wird ausgeführt, wenn Sie die Anforderung übermitteln.
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"
}
Wenn beim Versuch des Indexers, eine Verbindung mit der Datenquelle herzustellen, eine Fehlermeldung angezeigt wird, in der angegeben wird, dass der Zugriff des Clients auf den Server nicht zulässig ist, finden Sie entsprechende Informationen unter den häufigen Fehlern bei Indexern.