使用受控識別來設定 Azure SQL 受控執行個體的索引子連線

Note

Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

本文說明如何使用受控識別設定 Azure AI 搜尋服務索引子與 SQL 受控執行個體的連線,而不是在連接字串中提供認證。

你可以使用系統指派的管理身份或使用者指派的管理身份。 受管理身份是 Microsoft Entra 登入,且需要 Azure 角色指派才能存取 SQL 受管理執行個體 中的資料。

在你進一步了解這個功能之前,你應該先了解什麼是索引器,以及如何為你的資料來源設定索引器。 欲了解更多資訊,請參閱Azure AI 搜尋服務中的索引器及Azure SQL Database的索引資料。

先決條件

  • 為您的搜尋服務建立一個管理身份。

  • SQL 受控執行個體上的 Microsoft Entra 管理員角色:

    要在 SQL 受管理執行個體 上分配讀取權限,您必須是 Azure 全域管理員,並擁有 SQL 受管理執行個體。 請參考 配置並管理 SQL 受管理執行個體 的Microsoft Entra認證,並依步驟設定 Microsoft Entra 管理員(SQL 受管理執行個體)。

  • 在 SQL 受管理執行個體 中設定公開端點與網路安全群組,以允許來自 Azure AI 搜尋服務 的連線。 目前不支援使用管理身份時透過共享私有連結連線。

指派讀取資料庫的權限

請依照以下步驟指派搜尋服務系統管理身份權限,以讀取 SQL 管理資料庫。

  1. 透過以下任一方法,透過 SQL Server Management Studio(SSMS)連接您的 SQL 受管理執行個體:

  2. 請使用您的 Microsoft Entra 帳號進行驗證。

    顯示「連接伺服器」對話框的截圖。

  3. 從左側窗格找到你用作索引資料來源的 SQL 資料庫,然後右鍵點擊它。 選擇 新查詢。

    顯示新 SQL 查詢的截圖。

  4. 在 T-SQL 視窗中,複製以下指令,並在搜尋服務名稱周圍加上括號。 選擇 執行。

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

    展示如何執行 SQL 查詢的截圖。

若在指派權限後更改搜尋服務系統身份,必須移除角色成員資格及 SQL 資料庫中的使用者,然後重複權限指派。 要移除角色成員身份和使用者,請執行以下指令:

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

新增角色分配

在此步驟中,你授權 Azure AI 搜尋服務 服務讀取 SQL 受管理執行個體 的資料。

  1. 在 Azure 入口網站,前往你的 SQL 受管理執行個體 頁面。

  2. 選擇存取控制(IAM)。

  3. 選擇 新增>角色分配。

    顯示存取控制頁面截圖。

  4. 選擇 讀者 角色。

  5. 將 [存取權指派對象] 保留為 [Microsoft Entra 使用者、群組或服務主體]。

  6. 如果你正在使用系統指派的管理身份,請尋找你的搜尋服務,然後選取它。 如果你使用的是使用者指派的管理身份,請搜尋該受管理身份的名稱並選擇它。 選擇 儲存。

    這裡有一個使用 SQL 受管理執行個體 系統分配的受管理識別的範例:

    顯示成員角色分配的截圖。

建立資料來源

建立資料來源並提供系統指派的管理身份。

系統指派的管理識別

REST API、Azure入口網站,以及 .NET SDK 支援系統指派的管理身份。

當你使用系統指派的管理身份連接時,資料來源定義唯一的改變就是「憑證」屬性的格式。 您提供初始目錄或資料庫名稱,以及沒有帳戶金鑰或密碼的 ResourceId。 ResourceId 必須包含 SQL 受管理執行個體 的訂閱 ID、SQL Managed instance 的資源群組,以及 SQL 資料庫名稱。

以下是一個範例,說明如何使用 Create Data Source REST API 和受管理的身份連線字串,建立一個能從 SQL 受管理執行個體索引資料的資料來源。 REST API、.NET SDK 和 Azure 入口的受控身份識別連接字串格式相同。

POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "sql-mi-datasource",
    "type" : "azuresql",
    "credentials" : { 
        "connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.Sql/managedInstances/[SQL Managed Instance name];Connection Timeout=100;"
    },
    "container" : { 
        "name" : "my-table" 
    }
} 

建立索引

索引指定文件中的欄位、屬性及其他塑造搜尋體驗的結構。

這裡有一個可搜尋欄位的 booktitle REST API 呼叫:

POST https://[service name].search.windows.net/indexes?api-version=2026-04-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 }
    ]
}

建立索引器

索引器將資料來源與目標搜尋索引連結,並提供自動資料更新的排程。 建立索引和資料來源後,再建立索引器。

這裡有一個 Create Indexer REST API 呼叫,並定義了 Azure SQL indexer。 索引器會在你提交請求時執行。

POST https://[service name].search.windows.net/indexers?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]

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

故障排除

如果你在索引器嘗試連接資料來源時遇到錯誤,顯示客戶端無法存取伺服器,請參考 常見的索引器錯誤。

您也可以在有無限制的情況下嘗試連線,以排除任何防火牆問題。

參見